Show HN: Heku – Dynamic MCP Tooling via JSON Configs RapidThought Labs launched Heku, a single MCP server that dynamically serves tools via JSON configs, eliminating context bloat by lazy-loading only the tools an LLM needs. The open-source tool supports eight connector types, hot-reload, and self-managing configs, enabling agents to write their own tool definitions from API docs. One server. Any API. Any LLM. Your agent's tool manifest breaks around ten MCP servers. Every server you add fattens the manifest until the context fills up and the model starts forgetting which tools exist. heku is one MCP https://modelcontextprotocol.io server that removes that ceiling: you describe each tool as a JSON config, and heku serves them lazily — the manifest stays a few hundred tokens whether you've loaded ten configs or two hundred, and the model pulls in only the tools it needs, when it needs them. One server, any number of APIs, no context bloat. Agents can even write their own configs live from API docs. npx @rapidthoughtlabs/heku start Website · · Launch post → https://www.rapidthoughtlabs.com/blog/heku-dynamic-tooling · Console https://console.rapidthoughtlabs.space heku hub https://app.rapidthoughtlabs.space console.rapidthoughtlabs.space — hosted console you can point at any running heku instance. Connect, browse configs, chat with your tools, and inspect the system prompt — no local build needed. app.rapidthoughtlabs.space — heku hub , the online registry for browsing, installing, and publishing heku configs. Find community-built connectors for GitHub, Slack, Linear, and more — or publish your own. Install requires Node.js ≥ 20 : npx @rapidthoughtlabs/heku start or: npm install -g @rapidthoughtlabs/heku && heku start Create mcp-configs/mcp.github.json : { "id": "github-http", "name": "GitHub API", "description": "Manage GitHub repos, issues, and pull requests", "connector": { "type": "http", "base url": "https://api.github.com", "auth": { "type": "bearer", "token env": "GITHUB TOKEN" } }, "tools": { "name": "list repos", "description": "List repositories for the authenticated user", "method": "GET", "path": "/user/repos", "params": { "name": "per page", "type": "number", "required": false, "location": "query", "description": "Results per page" } } } heku auth setup github-http writes GITHUB TOKEN to .env heku start Your LLM now has a github-http.list repos tool — and the manifest grew by only that one entry. heku sits between your LLM and every API you've configured. Three ideas make it different from running a pile of separate MCP servers: Lazy discovery. The manifest the model sees stays small no matter how many configs you load. Tools are surfaced on demand instead of dumped up front, so you never hit the ~ten-server context wall. Configs, not code. A tool is a JSON file — an endpoint, its params, and how to authenticate. No per-integration server to build, ship, or maintain. Self-managing. Point heku at API docs and it can author and edit its own configs through internal tools, then hot-reload them without a restart. Tool names follow the pattern config id.tool name — e.g. github-http.list repos , linear-graphql.create issue . 8 connector types — 4 standard HTTP, GraphQL, gRPC, child-MCP + 4 experimental CLI, File, SQL, MongoDB Lazy tool discovery — manifest stays a few hundred tokens regardless of how many configs are loaded Hot-reload — add or edit a config, tools update live without restart Auto-discovery — gRPC reflection, GraphQL introspection, and child MCP tool listing fill in tools automatically Response stripping — base64 blobs, null fields, oversized strings, and long arrays are trimmed before the model sees them, keeping context lean without losing data Built-in console UI — React dashboard for chat, config editing, and registry browsing heku hub — publish and install community configs from app.rapidthoughtlabs.space https://app.rapidthoughtlabs.space Auth handled — bearer, basic, API key, and OAuth2 with .env -based credential management Self-managing — the server can create and edit its own configs via internal tools Each connector type wraps a different kind of backend as MCP tools. Full config schemas, field references, and examples live in connectors.md . | Connector | Status | What it wraps | Tool discovery | |---|---|---|---| http | graphql grpc .proto mcp cli file sql mongodb Experimental connectors are functional, but their config schema and behaviour may change in future releases. All credentials read from environment variables — heku auth setup writes them to .env , and nothing ever travels over the MCP protocol. | Type | Header | |---|---| bearer | Authorization: Bearer {token} | basic | Authorization: Basic base64 user:token | api key | Custom header, e.g. X-API-Key | oauth2 static | Pre-acquired OAuth2 access token | { "type": "bearer", "token env": "GITHUB TOKEN" } { "type": "api key", "key env": "MY KEY", "header name": "X-Api-Key" } { "type": "basic", "username env": "MY USER", "token env": "MY PASS" } { "type": "oauth2 static","token env": "MY OAUTH TOKEN" } heku start config-dir Start the MCP server stdio by default Flags: --http, --port