APIWeaver
Dynamically converts any REST API into MCP tools by registering web API configurations at runtime. Supports multiple authentication methods and automatically generates MCP-compatible tools for AI assistants to interact with external web services.
README
APIWeaver
A FastMCP server that dynamically creates MCP (Model Context Protocol) servers from web API configurations. This allows you to easily integrate any REST API, GraphQL endpoint, or web service into an MCP-compatible tool that can be used by AI assistants like Claude.
Features
- 🚀 Dynamic API Registration: Register any web API at runtime
- 🔐 Multiple Authentication Methods: Bearer tokens, API keys, Basic auth, OAuth2, and custom headers
- 🛠️ All HTTP Methods: Support for GET, POST, PUT, DELETE, PATCH, and more
- 📝 Flexible Parameters: Query params, path params, headers, and request bodies
- 🔄 Automatic Tool Generation: Each API endpoint becomes an MCP tool
- 🧪 Built-in Testing: Test API connections before using them
- 📊 Response Handling: Automatic JSON parsing with fallback to text
- 🌐 Multiple Transport Types: STDIO, SSE, and Streamable HTTP transport support
Transport Types
APIWeaver supports three different transport types to accommodate various deployment scenarios:
STDIO Transport (Default)
- Usage:
apiweaver runorapiweaver run --transport stdio - Best for: Local tools, command-line usage, and MCP clients that connect via standard input/output
- Characteristics: Direct process communication, lowest latency, suitable for desktop applications
- Endpoint: N/A (uses stdin/stdout)
SSE Transport (Legacy)
- Usage:
apiweaver run --transport sse --host 127.0.0.1 --port 8000 - Best for: Legacy MCP clients that only support Server-Sent Events
- Characteristics: HTTP-based, one-way streaming from server to client
- Endpoint:
http://host:port/mcp - Note: This transport is deprecated in favor of Streamable HTTP
Streamable HTTP Transport (Recommended)
- Usage:
apiweaver run --transport streamable-http --host 127.0.0.1 --port 8000 - Best for: Modern web deployments, cloud environments, and new MCP clients
- Characteristics: Full HTTP-based communication, bidirectional streaming, better error handling
- Endpoint:
http://host:port/mcp - Recommended: This is the preferred transport for new deployments
Installation
# Clone or download this repository
cd ~/Desktop/APIWeaver
# Install dependencies
pip install -r requirements.txt
Usage
Claude Desktop
{
"mcpServers": {
"apiweaver": {
"command": "uvx",
"args": ["apiweaver", "run"]
}
}
}
Starting the Server
There are several ways to run the APIWeaver server with different transport types:
1. After installation (recommended):
If you have installed the package (e.g., using pip install . from the project root after installing requirements):
# Default STDIO transport
apiweaver run
# Streamable HTTP transport (recommended for web deployments)
apiweaver run --transport streamable-http --host 127.0.0.1 --port 8000
# SSE transport (legacy compatibility)
apiweaver run --transport sse --host 127.0.0.1 --port 8000
2. Directly from the repository (for development):
# From the root of the repository
python -m apiweaver.cli run [OPTIONS]
Transport Options:
--transport: Choose fromstdio(default),sse, orstreamable-http--host: Host address for HTTP transports (default: 127.0.0.1)--port: Port for HTTP transports (default: 8000)--path: URL path for MCP endpoint (default: /mcp)
Run apiweaver run --help for all available options.
Using with AI Assistants (like Claude Desktop)
APIWeaver is designed to expose web APIs as tools for AI assistants that support the Model Context Protocol (MCP). Here's how to use it:
-
Start the APIWeaver Server:
For modern MCP clients (recommended):
apiweaver run --transport streamable-http --host 127.0.0.1 --port 8000For legacy compatibility:
apiweaver run --transport sse --host 127.0.0.1 --port 8000For local desktop applications:
apiweaver run # Uses STDIO transport -
Configure Your AI Assistant: The MCP endpoint will be available at:
- Streamable HTTP:
http://127.0.0.1:8000/mcp - SSE:
http://127.0.0.1:8000/mcp - STDIO: Direct process communication
- Streamable HTTP:
-
Register APIs and Use Tools: Once connected, use the built-in
register_apitool to define web APIs, then use the generated endpoint tools.
Core Tools
The server provides these built-in tools:
- register_api - Register a new API and create tools for its endpoints
- list_apis - List all registered APIs and their endpoints
- unregister_api - Remove an API and its tools
- test_api_connection - Test connectivity to a registered API
- call_api - Generic tool to call any registered API endpoint
- get_api_schema - Get schema information for APIs and endpoints
API Configuration Format
{
"name": "my_api",
"base_url": "https://api.example.com",
"description": "Example API integration",
"auth": {
"type": "bearer",
"bearer_token": "your-token-here"
},
"headers": {
"Accept": "application/json"
},
"endpoints": [
{
"name": "list_users",
"description": "Get all users",
"method": "GET",
"path": "/users",
"params": [
{
"name": "limit",
"type": "integer",
"location": "query",
"required": false,
"default": 10,
"description": "Number of users to return"
}
]
}
]
}
Examples
Example 1: OpenWeatherMap API
{
"name": "weather",
"base_url": "https://api.openweathermap.org/data/2.5",
"description": "OpenWeatherMap API",
"auth": {
"type": "api_key",
"api_key": "your-api-key",
"api_key_param": "appid"
},
"endpoints": [
{
"name": "get_current_weather",
"description": "Get current weather for a city",
"method": "GET",
"path": "/weather",
"params": [
{
"name": "q",
"type": "string",
"location": "query",
"required": true,
"description": "City name"
},
{
"name": "units",
"type": "string",
"location": "query",
"required": false,
"default": "metric",
"enum": ["metric", "imperial", "kelvin"]
}
]
}
]
}
Example 2: GitHub API
{
"name": "github",
"base_url": "https://api.github.com",
"description": "GitHub REST API",
"auth": {
"type": "bearer",
"bearer_token": "ghp_your_token_here"
},
"headers": {
"Accept": "application/vnd.github.v3+json"
},
"endpoints": [
{
"name": "get_user",
"description": "Get a GitHub user's information",
"method": "GET",
"path": "/users/{username}",
"params": [
{
"name": "username",
"type": "string",
"location": "path",
"required": true,
"description": "GitHub username"
}
]
}
]
}
Authentication Types
Bearer Token
{
"auth": {
"type": "bearer",
"bearer_token": "your-token-here"
}
}
API Key (Header)
{
"auth": {
"type": "api_key",
"api_key": "your-key-here",
"api_key_header": "X-API-Key"
}
}
API Key (Query Parameter)
{
"auth": {
"type": "api_key",
"api_key": "your-key-here",
"api_key_param": "api_key"
}
}
Basic Authentication
{
"auth": {
"type": "basic",
"username": "your-username",
"password": "your-password"
}
}
Custom Headers
{
"auth": {
"type": "custom",
"custom_headers": {
"X-Custom-Auth": "custom-value",
"X-Client-ID": "client-123"
}
}
}
Parameter Locations
- query: Query string parameters (
?param=value) - path: Path parameters (
/users/{id}) - header: HTTP headers
- body: Request body (for POST, PUT, PATCH)
Parameter Types
- string: Text values
- integer: Whole numbers
- number: Decimal numbers
- boolean: true/false
- array: Lists of values
- object: JSON objects
Advanced Features
Custom Timeouts
{
"timeout": 60.0 // Timeout in seconds
}
Enum Values
{
"name": "status",
"type": "string",
"enum": ["active", "inactive", "pending"]
}
Default Values
{
"name": "page",
"type": "integer",
"default": 1
}
Claude Desktop Configuration
For Streamable HTTP Transport (Recommended)
{
"mcpServers": {
"apiweaver": {
"command": "apiweaver",
"args": ["run", "--transport", "streamable-http", "--host", "127.0.0.1", "--port", "8000"]
}
}
}
For STDIO Transport (Traditional)
{
"mcpServers": {
"apiweaver": {
"command": "apiweaver",
"args": ["run"]
}
}
}
Error Handling
The server provides detailed error messages for:
- Missing required parameters
- HTTP errors (with status codes)
- Connection failures
- Authentication errors
- Invalid configurations
Tips
- Choose the Right Transport: Use
streamable-httpfor modern deployments,stdiofor local tools - Test First: Always use
test_api_connectionafter registering an API - Start Simple: Begin with GET endpoints before moving to complex POST requests
- Check Auth: Ensure your authentication credentials are correct
- Use Descriptions: Provide clear descriptions for better AI understanding
- Handle Errors: The server will report HTTP errors with details
Troubleshooting
Common Issues
- 401 Unauthorized: Check your authentication credentials
- 404 Not Found: Verify the base URL and endpoint paths
- Timeout Errors: Increase the timeout value for slow APIs
- SSL Errors: Some APIs may require specific SSL configurations
Debug Mode
Run with verbose logging (if installed):
apiweaver run --verbose
Transport-Specific Issues
- STDIO: Ensure the client properly handles stdin/stdout communication
- SSE: Check that the HTTP endpoint is accessible and CORS is configured
- Streamable HTTP: Verify the MCP endpoint responds to HTTP requests
Contributing
Feel free to extend this server with additional features:
- OAuth2 token refresh
- GraphQL support
- WebSocket endpoints
- Response caching
- Rate limiting
- Request retries
License
MIT License - feel free to use and modify as needed.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。