This project exposes an MCP server over HTTP using Hono at /mcp.
It gives three tools:
api_search: find operations from an OpenAPI specapi_execute: call one operation byoperationId(ormethod + path)session: store and read session variables (token, ids, etc.)
- Node.js 18+ installed
npm installnpm run devServer endpoints:
http://localhost:3000/http://localhost:3000/healthhttp://localhost:3000/mcp
OPENAPI_SPEC_URL: OpenAPI JSON URL (default:https://ag.nischal-dahal.com.np/api-docs-json)OPENAPI_SERVER_FILE_CACHE=1: optional, enable server-side file cache (disabled by default)API_BASE_URL: override API base URL used for executionPORT: HTTP server port (default3000)
If the spec URL is temporarily unavailable (for example 502), the MCP server stays alive and returns a structured tool error with recovery hints instead of crashing.
You can provide spec configuration without session storage:
?url=query param on MCP endpoint (recommended for static MCP config)urlheader on MCP requestauthorization: optional auth header used when fetching the spec URL
Example:
POST /mcp?url=api.example.com/openapi.json
authorization: Bearer YOUR_TOKENAdd an MCP server entry that points to this URL:
{
"mcpServers": {
"openapi-hono": {
"url": "https://dx.lexicon.website/mcp?url=https://ag.nischal-dahal.com.np/api-docs-json"
}
}
}You can set the spec URL in three ways:
- MCP URL query (recommended): configure
.../mcp?url=...in your MCP client.
https://your-domain/mcp?url=https://your-api.com/openapi.json- Per request override: pass
urlinapi_searchorapi_executearguments.
{
"name": "api_search",
"arguments": {
"query": "users list",
"url": "api.example.com/openapi.json"
}
}- Find operations:
{
"name": "api_search",
"arguments": {
"query": "login auth token",
"limit": 10
}
}- Execute operation:
{
"name": "api_execute",
"arguments": {
"operationId": "auth_login",
"body": {
"email": "user@example.com",
"password": "secret"
},
"extractVariables": {
"token": "$.data.token"
}
}
}- Reuse stored session token automatically (or inspect with
sessiontool):
{
"name": "session",
"arguments": {
"action": "getVariables"
}
}Note: only auth/token data is stored in session; OpenAPI URL is not read from session anymore.