Built with FastMCP for TypeScript.
- π― Zero Configuration: Filesystem is the interface - just drop OpenAPI specs in a folder
- π Auto Authentication: Simple
.envfile with{API_NAME}_API_KEYpattern - π·οΈ Namespace Isolation: Multiple APIs coexist cleanly (e.g.,
petstore_getPet,github_getUser) - π Full OpenAPI Support: Handles parameters, request bodies, authentication, and responses
- π Multiple Transports: Support for stdio and HTTP streaming
- π Built-in Debugging: List command to see loaded specs and tools
npm install -g specbridgemkdir ~/mcp-apisDrop any .json, .yaml, or .yml OpenAPI specification files into your specs folder:
# Example: Download the Petstore spec
curl -o ~/mcp-apis/petstore.json https://petstore3.swagger.io/api/v3/openapi.jsonCreate a .env file in your specs folder:
# ~/mcp-apis/.env
PETSTORE_API_KEY=your_api_key_here
GITHUB_TOKEN=ghp_your_github_token
OPENAI_API_KEY=sk-your_openai_keyFor Claude Desktop or Cursor, add to your MCP configuration:
If installed on your machine:
{
"mcpServers": {
"specbridge": {
"command": "specbridge",
"args": ["--specs", "/path/to/your/specs/folder"]
}
}
}Otherwise:
{
"mcpServers": {
"specbridge": {
"command": "npx",
"args": ["-y", "specbridge", "--specs", "/absolute/path/to/your/specs"]
}
}
}# Default: stdio transport, current directory
specbridge
# Custom specs folder
specbridge --specs ~/my-api-specs
# HTTP transport mode
specbridge --transport httpStream --port 8080# List all loaded specifications and their tools
specbridge list
# List specs from custom folder
specbridge list --specs ~/my-api-specsThe server automatically detects authentication from environment variables using these patterns:
| Pattern | Auth Type | Usage |
|---|---|---|
{API_NAME}_API_KEY |
ποΈ API Key | X-API-Key header |
{API_NAME}_TOKEN |
π« Bearer Token | Authorization: Bearer {token} |
{API_NAME}_BEARER_TOKEN |
π« Bearer Token | Authorization: Bearer {token} |
{API_NAME}_USERNAME + {API_NAME}_PASSWORD |
π€ Basic Auth | Authorization: Basic {base64} |
The {API_NAME} is derived from the filename of your OpenAPI spec:
petstore.jsonβPETSTORE_API_KEYgithub-api.yamlβGITHUB_TOKENmy_custom_api.ymlβMYCUSTOMAPI_API_KEY
Tools are automatically named using this pattern:
- With operationId:
{api_name}_{operationId} - Without operationId:
{api_name}_{method}_{path_segments}
Examples:
petstore_getPetById(from operationId)github_get_user_repos(generated fromGET /user/repos)
your-project/
βββ api-specs/ # Your OpenAPI specs folder
β βββ .env # Authentication credentials
β βββ petstore.json # OpenAPI spec files
β βββ github.yaml #
β βββ custom-api.yml #
βββ mcp-config.json # MCP client configuration
Here's a minimal example that creates two tools:
# ~/mcp-apis/example.yaml
openapi: 3.0.0
info:
title: Example API
version: 1.0.0
servers:
- url: https://api.example.com
paths:
/users/{id}:
get:
operationId: getUser
summary: Get user by ID
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: User found
/users:
post:
operationId: createUser
summary: Create a new user
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
email:
type: string
responses:
'201':
description: User createdThis creates tools named:
example_getUserexample_createUser
-
Check that your OpenAPI specs are valid:
specbridge list --specs /path/to/specs
-
Ensure files have correct extensions (
.json,.yaml,.yml) -
Check the server logs for parsing errors
β οΈ Note: Specbridge works best when you use absolute paths (with no spaces) for the--specsargument and other file paths. Relative paths or paths containing spaces may cause issues on some platforms or with some MCP clients.
- Verify your
.envfile is in the specs directory - Check the naming pattern matches your spec filename
- Use the list command to verify auth configuration:
specbridge list
- Restart the MCP server to reload the specs
- Check file permissions
- Restart the MCP client if needed
# Clone and install
git clone https://github.com/TBosak/specbridge.git
cd specbridge
npm install
# Build
npm run build
# Test locally
npm run dev -- --specs ./examplesContributions are welcome! Please feel free to submit issues and pull requests.