Labsco
GongRzhe logo

APIWeaver

โ˜… 49

from GongRzhe

A universal bridge to convert any web API into an MCP server, supporting multiple transport types.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeNeeds API keys

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 run or apiweaver 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
  • 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

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
}

Error Handling

The server provides detailed error messages for:

  • Missing required parameters
  • HTTP errors (with status codes)
  • Connection failures
  • Authentication errors
  • Invalid configurations

Tips

  1. Choose the Right Transport: Use streamable-http for modern deployments, stdio for local tools
  2. Test First: Always use test_api_connection after registering an API
  3. Start Simple: Begin with GET endpoints before moving to complex POST requests
  4. Check Auth: Ensure your authentication credentials are correct
  5. Use Descriptions: Provide clear descriptions for better AI understanding
  6. Handle Errors: The server will report HTTP errors with details