Show HN: Give LLMs TypeScript tools without writing MCP servers(github.com)2 points·by jmcodes·9 mesi fa·0 commentsgithub.comShow HN: Give LLMs TypeScript tools without writing MCP servershttps://github.com/jx-codes/mcp-rpcI built this after reading Cloudflare's "Code Mode" article and building my own local version (link below).Instead of making MCP tool calls, LLMs write TypeScript against auto-generated RPC clients. // Follow the readme instructions and run the RPC server mcp-rpc-runtime -r ./test-rpc -p 8080 Drop .ts files with typed exports: // ./test-rpc/users.ts export async function getUser(args: { id: number }): Promise<User> { ... }The system generates a typed client. LLMs write normal TypeScript: const [user, orders] = await Promise.all([ rpc.users.getUser({ id: 123 }), rpc.orders.getHistory({ userId: 123 }) ]);No MCP servers needed. The RPC runtime has full system access, while LLM scripts run sandboxed with only network permissions.Original Local Code Mode: https://github.com/jx-codes/codemode-mcp Runtime: https://github.com/jx-codes/mcp-rpc-runtime MCP Bridge: https://github.com/jx-codes/mcp-rpc-bridge Details: https://jmcodes.tech/blog/mcp-rpc/0 commentsPost comment—
Instead of making MCP tool calls, LLMs write TypeScript against auto-generated RPC clients. // Follow the readme instructions and run the RPC server
Drop .ts files with typed exports: // ./test-rpc/users.ts export async function getUser(args: { id: number }): Promise<User> { ... }
The system generates a typed client. LLMs write normal TypeScript: const [user, orders] = await Promise.all([ rpc.users.getUser({ id: 123 }), rpc.orders.getHistory({ userId: 123 }) ]);
No MCP servers needed. The RPC runtime has full system access, while LLM scripts run sandboxed with only network permissions.
Original Local Code Mode: https://github.com/jx-codes/codemode-mcp Runtime: https://github.com/jx-codes/mcp-rpc-runtime MCP Bridge: https://github.com/jx-codes/mcp-rpc-bridge Details: https://jmcodes.tech/blog/mcp-rpc/