DexScreener Pairs
Discover crypto trading pairs across supported chains on DexScreener. Fetch up-to-date pair details by chain and address, or list all pairs for a token. Speed up market research for pricing, liquidity
Description
DexScreener MCP Server
An MCP server implementation for accessing the DexScreener API, providing real-time access to DEX pair data, token information, and market statistics across multiple blockchains.
One-line install (automatically adds to Claude Desktop):
curl -L https://raw.githubusercontent.com/opensvm/dexscreener-mcp-server/main/install.sh | bash
Features
- Rate-limited API access (respects DexScreener's rate limits)
- Comprehensive error handling
- Type-safe interfaces
- Support for all DexScreener API endpoints
- Integration tests
Installation
Manual installation:
npm install
npm run build
npm run setup
Runtime configuration
Provide SMITHERY_API_KEY at runtime. Do not bake it into the image.
Docker Compose (recommended):
- Using
.envfile:
echo "SMITHERY_API_KEY=your_api_key" > .env
Ensure your service has:
services:
dexscreener-mcp:
env_file:
- .env
environment:
NODE_ENV: production
- Or via inline environment variables:
services:
dexscreener-mcp:
environment:
SMITHERY_API_KEY: ${SMITHERY_API_KEY}
NODE_ENV: production
Kubernetes:
- Store the key in a Secret:
kubectl create secret generic smithery-api --from-literal=SMITHERY_API_KEY=your_api_key
- Reference it in your Deployment:
env:
- name: SMITHERY_API_KEY
valueFrom:
secretKeyRef:
name: smithery-api
key: SMITHERY_API_KEY
Note: If a default is required, set it in the orchestrator (Compose/Kubernetes),
not in the Dockerfile.
Testing
npm test
Usage
Available Tools
-
get_latest_token_profiles- Get the latest token profiles
- No parameters required
const result = await mcpClient.callTool( "dexscreener", "get_latest_token_profiles" ); -
get_latest_boosted_tokens- Get the latest boosted tokens
- No parameters required
const result = await mcpClient.callTool( "dexscreener", "get_latest_boosted_tokens" ); -
get_top_boosted_tokens- Get tokens with most active boosts
- No parameters required
const result = await mcpClient.callTool( "dexscreener", "get_top_boosted_tokens" ); -
get_token_orders- Check orders paid for a specific token
const result = await mcpClient.callTool("dexscreener", "get_token_orders", { chainId: "solana", tokenAddress: "So11111111111111111111111111111111111111112", }); -
get_pairs_by_chain_and_address- Get one or multiple pairs by chain and pair address
const result = await mcpClient.callTool( "dexscreener", "get_pairs_by_chain_and_address", { chainId: "solana", pairId: "HxFLKUAmAMLz1jtT3hbvCMELwH5H9tpM2QugP8sKyfhc", } ); -
get_pairs_by_token_addresses- Get one or multiple pairs by token address (max 30)
const result = await mcpClient.callTool( "dexscreener", "get_pairs_by_token_addresses", { tokenAddresses: "So11111111111111111111111111111111111111112", } ); -
search_pairs- Search for pairs matching query
const result = await mcpClient.callTool("dexscreener", "search_pairs", { query: "SOL", });
Rate Limits
The server implements rate limiting to comply with DexScreener's API limits:
- Token Profile/Boost endpoints: 60 requests per minute
- DEX/Pairs endpoints: 300 requests per minute
Error Handling
The server handles various error scenarios:
- Rate limit exceeded
- Invalid parameters
- Network errors
- API errors
Errors are returned in a standardized format with appropriate error codes and messages.
API Documentation
For detailed API documentation, see docs/api-reference.md.
Development
Project Structure
.
├── src/
│ ├── types/ # TypeScript interfaces and types
│ ├── services/ # API service implementations
│ ├── tests/ # Integration tests
│ └── index.ts # Main server implementation
├── scripts/ # Setup and utility scripts
├── docs/ # Documentation
└── README.md # This file
Adding New Features
- Define types in
src/types/ - Implement service methods in
src/services/ - Add tool handlers in
src/index.ts - Update documentation
- Add tests
License
MIT
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!