OpenAPI to MCP Server
Uma ferramenta para criar servidores MCP a partir de especificações OpenAPI/Swagger, permitindo que assistentes de IA interajam com suas APIs.
Documentação
Servidor OpenAPI para MCP
Uma ferramenta que cria servidores MCP (Model Context Protocol) a partir de especificações OpenAPI/Swagger, permitindo que assistentes de IA interajam com suas APIs. Crie seus próprios MCPs personalizados e com marca para APIs ou serviços específicos.
Visão Geral
Este projeto cria um servidor MCP dinâmico que transforma especificações OpenAPI em ferramentas MCP. Ele permite a integração perfeita de APIs REST com assistentes de IA por meio do Model Context Protocol, transformando qualquer API em uma ferramenta acessível por IA.
Recursos
- Carregamento dinâmico de especificações OpenAPI a partir de arquivos ou URLs HTTP/HTTPS
- Suporte para OpenAPI Overlays carregados de arquivos ou URLs HTTP/HTTPS
- Mapeamento personalizável de operações OpenAPI para ferramentas MCP
- Filtragem avançada de operações usando padrões glob tanto para operationId quanto para caminhos de URL
- Tratamento abrangente de parâmetros com preservação de formato e metadados de localização
- Tratamento de autenticação de API
- Metadados OpenAPI (título, versão, descrição) usados para configurar o servidor MCP
- Fallbacks hierárquicos de descrição (descrição da operação → resumo da operação → resumo do caminho)
- Suporte a cabeçalhos HTTP personalizados via variáveis de ambiente e CLI
- Cabeçalho X-MCP para rastreamento e identificação de solicitações de API
- Suporte para extensões personalizadas
x-mcpno nível do caminho para substituir nomes e descrições de ferramentas
Usando com Assistentes de IA
Esta ferramenta cria um servidor MCP que permite que assistentes de IA interajam com APIs definidas por especificações OpenAPI. A principal forma de uso é configurando seu assistente de IA para executá-lo diretamente como uma ferramenta MCP.
Configuração no Claude Desktop
-
Certifique-se de ter o Node.js instalado no seu computador
-
Abra o Claude Desktop e navegue até Configurações > Desenvolvedor
-
Edite o arquivo de configuração (ou ele será criado se não existir):
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
Adicione esta configuração (personalize conforme necessário):
{
"mcpServers": {
"api-tools": {
"command": "npx",
"args": [
"-y",
"@tyk-technologies/api-to-mcp@latest",
"--spec",
"https://petstore3.swagger.io/api/v3/openapi.json"
],
"enabled": true
}
}
}
- Reinicie o Claude Desktop
- Agora você deve ver um ícone de martelo na caixa de entrada de chat. Clique nele para acessar suas ferramentas de API.
Personalizando a Configuração
Você pode ajustar o array args para personalizar seu servidor MCP com várias opções:
{
"mcpServers": {
"my-api": {
"command": "npx",
"args": [
"-y",
"@tyk-technologies/api-to-mcp@latest",
"--spec",
"./path/to/your/openapi.json",
"--overlays",
"./path/to/overlay.json,https://example.com/api/overlay.json",
"--whitelist",
"getPet*,POST:/users/*",
"--targetUrl",
"https://api.example.com"
],
"enabled": true
}
}
}
Configuração no Cursor
-
Crie um arquivo de configuração em um destes locais:
- Específico do projeto:
.cursor/mcp.jsonno diretório do seu projeto - Global:
~/.cursor/mcp.jsonno seu diretório pessoal
- Específico do projeto:
-
Adicione esta configuração (ajuste conforme necessário para sua API):
{
"servers": [
{
"command": "npx",
"args": [
"-y",
"@tyk-technologies/api-to-mcp@latest",
"--spec",
"./path/to/your/openapi.json"
],
"name": "My API Tools"
}
]
}
- Reinicie o Cursor ou recarregue a janela
Usando com o Vercel AI SDK
Você também pode usar este servidor MCP diretamente em suas aplicações JavaScript/TypeScript usando o cliente MCP do Vercel AI SDK:
import { experimental_createMCPClient } from 'ai';
import { Experimental_StdioMCPTransport } from 'ai/mcp-stdio';
import { generateText } from 'ai';
import { createGoogleGenerativeAI } from '@ai-sdk/google';
// Initialize the Google Generative AI provider
const google = createGoogleGenerativeAI({
apiKey: process.env.GOOGLE_API_KEY, // Set your API key in environment variables
});
const model = google('gemini-2.0-flash');
// Create an MCP client with stdio transport
const mcpClient = await experimental_createMCPClient({
transport: {
type: 'stdio',
command: 'npx', // Command to run the MCP server
args: ['-y', '@tyk-technologies/api-to-mcp', '--spec', 'https://petstore3.swagger.io/api/v3/openapi.json'], // OpenAPI spec
env: {
// You can set environment variables here
// API_KEY: process.env.YOUR_API_KEY,
},
},
});
async function main() {
try {
// Retrieve tools from the MCP server
const tools = await mcpClient.tools();
// Generate text using the AI SDK with MCP tools
const { text } = await generateText({
model,
prompt: 'List all available pets in the pet store using the API.',
tools, // Pass the MCP tools to the model
});
console.log('Generated text:', text);
} catch (error) {
console.error('Error:', error);
} finally {
// Always close the MCP client to release resources
await mcpClient.close();
}
}
main();
Configuração
A configuração é gerenciada por meio de variáveis de ambiente, opções de linha de comando ou um arquivo de configuração JSON:
Opções de Linha de Comando
# Start with specific OpenAPI spec file
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json
# Apply overlays to the spec
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --overlays=./path/to/overlay.json,https://example.com/api/overlay.json
# Include only specific operations (supports glob patterns)
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --whitelist="getPet*,POST:/users/*"
# Specify target API URL
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --targetUrl=https://api.example.com
# Add custom headers to all API requests
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --headers='{"X-Api-Version":"1.0.0"}'
# Disable the X-MCP header
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --disableXMcp
Variáveis de Ambiente
Você pode defini-las em um arquivo .env ou diretamente no seu ambiente:
OPENAPI_SPEC_PATH: Caminho para o arquivo de especificação OpenAPIOPENAPI_OVERLAY_PATHS: Caminhos separados por vírgula para arquivos JSON de overlayTARGET_API_BASE_URL: URL base para chamadas de API (substitui os servidores OpenAPI)MCP_WHITELIST_OPERATIONS: Lista separada por vírgulas de IDs de operação ou caminhos de URL a incluir (suporta padrões glob comogetPet*ouGET:/pets/*)MCP_BLACKLIST_OPERATIONS: Lista separada por vírgulas de IDs de operação ou caminhos de URL a excluir (suporta padrões glob, ignorado se a lista de permissões for usada)API_KEY: Chave de API para a API de destino (se necessário)SECURITY_SCHEME_NAME: Nome do esquema de segurança que requer a Chave de APISECURITY_CREDENTIALS: String JSON contendo credenciais de segurança para múltiplos esquemasCUSTOM_HEADERS: String JSON contendo cabeçalhos personalizados para incluir em todas as solicitações de APIHEADER_*: Qualquer variável de ambiente que comece comHEADER_será adicionada como cabeçalho personalizado (por exemplo,HEADER_X_API_Version=1.0.0adiciona o cabeçalhoX-API-Version: 1.0.0)DISABLE_X_MCP: Defina comotruepara desativar a adição do cabeçalhoX-MCP: 1a todas as solicitações de APICONFIG_FILE: Caminho para um arquivo de configuração JSON
Configuração JSON
Você também pode usar um arquivo de configuração JSON em vez de variáveis de ambiente ou opções de linha de comando. O servidor MCP procurará arquivos de configuração na seguinte ordem:
- Caminho especificado pela opção de linha de comando
--config - Caminho especificado pela variável de ambiente
CONFIG_FILE config.jsonno diretório atualopenapi-mcp.jsonno diretório atual.openapi-mcp.jsonno diretório atual
Exemplo de arquivo de configuração JSON:
{
"spec": "./path/to/openapi-spec.json",
"overlays": "./path/to/overlay1.json,https://example.com/api/overlay.json",
"targetUrl": "https://api.example.com",
"whitelist": "getPets,createPet,/pets/*",
"blacklist": "deletePet,/admin/*",
"apiKey": "your-api-key",
"securitySchemeName": "ApiKeyAuth",
"securityCredentials": {
"ApiKeyAuth": "your-api-key",
"OAuth2": "your-oauth-token"
},
"headers": {
"X-Custom-Header": "custom-value",
"User-Agent": "OpenAPI-MCP-Client/1.0"
},
"disableXMcp": false
}
Um exemplo completo de arquivo de configuração com comentários explicativos está disponível em config.example.json no diretório raiz.
Precedência de Configuração
As configurações são aplicadas na seguinte ordem de precedência (da maior para a menor):
- Opções de linha de comando
- Variáveis de ambiente
- Arquivo de configuração JSON
Desenvolvimento
Instalação
# Clone the repository
git clone <repository-url>
cd openapi-to-mcp-generator
# Install dependencies
npm install
# Build the project
npm run build
Testes Locais
# Start the MCP server
npm start
# Development mode with auto-reload
npm run dev
Personalizando e Publicando Sua Própria Versão
Você pode usar este repositório como base para criar seu próprio servidor OpenAPI para MCP personalizado. Esta seção explica como fazer um fork do repositório, personalizá-lo para suas APIs específicas e publicá-lo como um pacote.
Fazendo Fork e Personalizando
-
Faça um Fork do Repositório: Faça um fork deste repositório no GitHub para criar sua própria cópia que você pode personalizar.
-
Adicione Suas Especificações OpenAPI:
# Create a specs directory if it doesn't exist mkdir -p specs # Add your OpenAPI specifications cp path/to/your/openapi-spec.json specs/ # Add any overlay files cp path/to/your/overlay.json specs/ -
Configure as Configurações Padrão: Crie um arquivo de configuração personalizado que será incluído no seu pacote:
# Copy the example config cp config.example.json config.json # Edit the config to point to your bundled specs # and set any default settings -
Atualize o package.json:
{ "name": "your-custom-mcp-server", "version": "1.0.0", "description": "Your customized MCP server for specific APIs", "files": [ "dist/**/*", "config.json", "specs/**/*", "README.md" ] } -
Garanta que as Especificações Estejam Incluídas: O campo
filesno package.json (mostrado acima) garante que suas especificações e arquivo de configuração serão incluídos no pacote publicado.
Personalizando o Workflow do GitHub
O repositório inclui um workflow do GitHub Actions para publicação automática no npm. Para personalizá-lo para seu repositório com fork:
-
Atualize o Nome do Workflow: Edite
.github/workflows/publish-npm.yamlpara atualizar o nome, se desejado:name: Publish My Custom MCP Package -
Defina o Escopo do Pacote (se necessário): Se você quiser publicar sob um escopo de organização npm, descomente e modifique a linha de escopo no arquivo de workflow:
- name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "18" registry-url: "https://registry.npmjs.org/" # Uncomment and update with your organization scope: scope: "@your-org" -
Configure o Token npm: Adicione seu token npm como um segredo do GitHub chamado
NPM_TOKENnas configurações do seu repositório com fork.
Publicando Seu Pacote Personalizado
Depois de personalizar o repositório:
-
Crie e Envie uma Tag:
# Update version in package.json (optional, the workflow will update it based on the tag) npm version 1.0.0 # Push the tag git push --tags -
O GitHub Actions irá:
- Compilar automaticamente o pacote
- Atualizar a versão no package.json para corresponder à tag
- Publicar no npm com suas especificações e configuração incluídas
Uso Após a Publicação
Os usuários do seu pacote personalizado podem instalá-lo e usá-lo com npm:
# Install your customized package
npm install your-custom-mcp-server -g
# Run it
your-custom-mcp-server
Eles podem substituir suas configurações padrão por meio de variáveis de ambiente ou opções de linha de comando, conforme descrito na seção Configuração.
Licença
MIT