runtime-mcp
Drop-in MCP server that lets Claude inspect, debug, and hot-fix your running Bun process through conversation.
README
runtime-mcp
Drop-in MCP server that lets Claude inspect, debug, and hot-fix your running Bun process through conversation.
One line of code. Claude can now see inside your running Bun server — memory, queries, traffic, errors, everything.
import { attachMCP } from 'runtime-mcp';
attachMCP({ port: 3100 }); // that's it
Your Bun process now speaks MCP. Connect Claude Desktop, Cursor, or any MCP client and start asking questions about your live app.
Why
Debugging a running app today means adding logging, restarting, and hoping you guessed the right thing to log. LLMs can read your source code, but they can't see your runtime state — the variable values, the open connections, the slow queries, the memory growth.
runtime-mcp fixes that. It exposes your process internals as MCP resources and tools, so the LLM examines the live patient instead of guessing from the chart.
Quick Start
1. Install
bun add runtime-mcp
2. Attach to your server
import { serve } from 'bun';
import { attachMCP } from 'runtime-mcp';
const server = serve({
port: 3000,
fetch: () => new Response('Hello'),
});
attachMCP({
port: 3100,
bind: { server },
});
3. Connect Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"my-app": {
"url": "http://localhost:3100/sse"
}
}
}
Restart Claude Desktop. Ask: "What is this process doing?"
What Claude Can See
Resources (read-only, always available)
| Resource | URI | Description |
|---|---|---|
| Process info | runtime://process/info |
PID, uptime, Bun version, entrypoint, env vars |
| Memory | runtime://process/memory |
RSS, heap used/total, external, array buffers |
| Event loop | runtime://process/event-loop |
Pending timers, active handles, loop lag |
| HTTP routes | runtime://server/routes |
All registered routes, active connections, req/min |
| Request log | runtime://server/requests |
Recent HTTP requests with status, duration, bodies |
| Errors | runtime://errors/recent |
Uncaught exceptions and unhandled rejections (deduplicated) |
| DB connections | runtime://db/connections |
Pool state, recent queries, slow queries |
| Module graph | runtime://modules/graph |
Full dependency tree from entrypoint |
| WebSockets | runtime://websockets |
Active connections, message counts |
| Variables | runtime://variables/{path} |
Inspect any bound variable by dot-path |
Tools (actions Claude can take)
| Tool | Description |
|---|---|
inspect |
Deep-inspect any reachable object by expression |
eval |
Execute JavaScript in the process context |
get_source |
Read source files from the running process |
intercept_requests |
Capture HTTP traffic matching a glob pattern |
intercept_sql |
Capture SQL queries matching a substring |
subscribe_events |
Stream real-time events (requests, errors, queries) |
heap_snapshot |
Take a V8 heap snapshot, diff against previous |
profile |
CPU profile for N milliseconds* |
set_breakpoint |
Conditional breakpoints with state capture* |
hot_patch |
Replace a module's code at runtime without restart |
shell |
Run read-only shell commands in the process cwd |
*Requires node:inspector — not yet available in Bun (tracking issue).
Prompts (guided debugging workflows)
| Prompt | Description |
|---|---|
debug-endpoint |
Systematically debug a specific HTTP endpoint |
find-memory-leak |
Snapshot, wait, diff, identify growing allocations |
explain-process |
Full overview of what the process is doing right now |
generate-tests |
Watch live traffic and generate test cases from it |
optimize-query |
Find slow queries, explain plans, suggest fixes |
Configuration
attachMCP({
// Transport
port: 3100, // MCP server port (default: 3100)
host: 'localhost', // Bind address (default: 'localhost')
// What to expose
bind: { // Objects the LLM can inspect/eval against
server,
db,
config,
},
// Access control
readOnly: false, // Disable eval, hot_patch, shell (default: true in production)
allowedTools: undefined, // Whitelist specific tools
blockedTools: undefined, // Blacklist specific tools
// Observation tuning
requestLog: {
maxSize: 1000, // Ring buffer size
includeBodies: true, // Capture req/res bodies (default: false in production)
},
sqlLog: {
maxSize: 500,
includeParams: true, // Capture query params (default: false in production)
slowThreshold: 500, // Slow query threshold in ms
},
// Remote access (requires auth)
auth: 'your-secret-token', // Required when host !== localhost
});
Production Defaults
When NODE_ENV=production, runtime-mcp automatically:
- Sets
readOnly: true— disableseval,hot_patch,shell - Hides request/response bodies
- Hides SQL query parameters
- All read-only inspection tools remain available
Binding Objects
Pass objects to bind to make them accessible to Claude:
import { serve } from 'bun';
import { SQL } from 'bun';
import { attachMCP } from 'runtime-mcp';
const db = new SQL('postgres://localhost/myapp');
const server = serve({ port: 3000, fetch: handleRequest });
const config = { featureFlags: { newCheckout: true }, rateLimit: 100 };
attachMCP({
port: 3100,
bind: { server, db, config },
});
runtime-mcp auto-detects:
- Bun.serve() servers — wraps the fetch handler to intercept HTTP traffic
- Bun.sql instances — wraps queries to capture SQL traffic
- WebSocket handlers — tracks connections and messages
Everything else is available through inspect and eval by name.
Security
- Binds to
localhostonly by default - Non-localhost binding requires the
authoption (Bearer token) - Production mode disables code execution tools
- Shell tool blocks destructive commands (
rm,kill,shutdown, etc.) - Sensitive env vars are filtered from process info
This is a development tool. Treat the MCP port like a debugger port — don't expose it to the internet.
Requirements
- Bun >= 1.0.0
- An MCP client (Claude Desktop, Cursor, or any MCP-compatible tool)
How It Was Built
This project was built in a single session using Ralph, an autonomous AI agent loop. A PRD was written, converted to a task list, and Ralph implemented all 22 user stories sequentially — each one adding a resource, tool, or interceptor layer.
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。