MCPify
Point it at API docs, get an MCP server.
MCPify scrapes API documentation, uses Gemini to figure out the endpoints/auth/params, and spits out a config file. The runtime reads that config and runs an MCP server that Claude (or any MCP client) can use to call the API.
Installation
git clone https://github.com/yourusername/mcpify.git
cd mcpify
pip install -e .
Needs Python 3.11+ and a Gemini API key.
Usage
export GEMINI_API_KEY="your-api-key"
# Parse docs into a config file
mcpify parse https://api.example.com/docs -o my-api.json
# Run the server
mcpify serve my-api.json --auth "your-api-token"
# Or do both at once
mcpify quickstart https://api.example.com/docs --auth "token"
To use with Claude Desktop, add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"my-api": {
"command": "mcpify",
"args": ["serve", "/path/to/my-api.json", "--auth", "your-token"]
}
}
}
CLI
mcpify parse <url> - Scrape docs and generate config
mcpify parse https://docs.github.com/en/rest -o github.json --max-pages 15
| Option | Description |
|---|---|
-o, --output | Output file (default: mcpify-config.json) |
-m, --max-pages | Max pages to scrape (default: 10) |
--no-follow | Don't follow links |
-k, --api-key | Gemini API key (or use env var) |
--model | Gemini model (default: gemini-2.0-flash) |
mcpify serve <config> - Run MCP server
mcpify serve my-api.json --auth "Bearer token" --transport stdio
| Option | Description |
|---|---|
-a, --auth | Auth token for API calls |
-t, --transport | stdio, sse, or http (default: stdio) |
mcpify show <config> - Print config as table
mcpify quickstart <url> - Parse and serve in one shot
Config Format
The generated JSON looks like this:
{
"name": "my-api",
"description": "Description of the API",
"base_url": "https://api.example.com/v1",
"version": "1.0.0",
"auth": {
"type": "bearer",
"header_name": "Authorization",
"prefix": "Bearer "
},
"tools": [
{
"name": "get_users",
"description": "Retrieve a list of users",
"method": "GET",
"path": "/users",
"parameters": [
{
"name": "limit",
"type": "integer",
"description": "Max results to return",
"required": false,
"location": "query",
"default": 10
}
],
"response": {
"description": "Array of user objects"
},
"tags": ["users"]
}
]
}
Auth types: none, api_key, bearer, oauth2
Parameter locations: query, path, header, body
Python API
from mcpify.scraper import scrape_documentation
from mcpify.parser import parse_documentation
from mcpify.runtime import create_mcp_server
# Scrape docs
docs = await scrape_documentation("https://api.example.com/docs")
# Parse with Gemini
config = await parse_documentation(docs)
# Save config
config_path = "my-api.json"
with open(config_path, "w") as f:
f.write(config.to_json())
# Create and run server
server = create_mcp_server(config, auth_token="your-token")
server.run()
Examples
# GitHub
mcpify parse https://docs.github.com/en/rest/users -o github.json
mcpify serve github.json --auth "ghp_your_token"
# Stripe
mcpify parse https://stripe.com/docs/api -o stripe.json
mcpify serve stripe.json --auth "sk_test_your_key"
License
MIT
