How the MCP Server is Implemented in OmniRoute to Support 110 Tools Across 33 Scopes
The OmniRoute MCP server exposes 110 internal I/O tools via a JSON-RPC 2.0 interface by dynamically registering tool modules from open-sse/mcp-server/tools/ and enforcing granular access controls through 33 distinct permission scopes defined in scopeEnforcement.ts.
The diegosouzapw/OmniRoute repository implements a high-performance Multicall Protocol (MCP) server that centralizes access to over 110 internal tools through a unified JSON-RPC endpoint. Located under open-sse/mcp-server/, this architecture separates concerns between HTTP transport, authentication, scope enforcement, and tool discovery to deliver secure, scalable remote procedure calls across 33 functional domains.
Core Architecture of the MCP Server
The implementation follows a layered architecture where each component handles a specific aspect of the request lifecycle. According to the source code in diegosouzapw/OmniRoute, the server is composed of seven primary modules working in concert.
HTTP Transport and Authentication Layer
The [httpTransport.ts](https://github.com/diegosouzapw/OmniRoute/blob/release/v3.8.50/open-sse/mcp-server/httpTransport.ts) file implements the low-level HTTP listener that parses incoming JSON-RPC 2.0 payloads and manages request timeouts and abort signals. It exposes the /api/mcp endpoint and handles the wire protocol serialization.
Authentication logic resides in [httpAuthContext.ts](https://github.com/diegosouzapw/OmniRoute/blob/release/v3.8.50/open-sse/mcp-server/httpAuthContext.ts), which extracts caller identity from JWT tokens, API keys, or internal authentication headers. This module constructs a CallerIdentity object that downstream components use for permission verification.
Scope Enforcement Mechanism
The [scopeEnforcement.ts](https://github.com/diegosouzapw/OmniRoute/blob/release/v3.8.50/open-sse/mcp-server/scopeEnforcement.ts) file implements the permission matrix that defines the 33 functional scopes. Each scope corresponds to a specific domain such as skill, pool, plugin, memory, radar, compression, githubSkill, notion, obsidian, localCorpus, gamification, agentSkill, pickFastestModel, advanced, a2aLifecycle, audit, pricingSync, cache, dbHealth, createCombo, routingStrategy, pricing, descriptionCompressor, runtimeHeartbeat, toolSearch, toolCount, toolCardinality, toolResult, toolDefinition, providerEnums, ccrTools, and radarCatalog.
Every tool implementation explicitly declares its required scopes. Before executing any tool method, the enforcement layer validates that the caller's granted scopes—derived from JWT claims or API-key policies—encompass all required permissions. Unauthorized calls receive an immediate rejection before reaching business logic.
Dynamic Tool Registry and Catalog
The [toolSearch/register.ts](https://github.com/diegosouzapw/OmniRoute/blob/release/v3.8.50/open-sse/mcp-server/toolSearch/register.ts) module discovers all tool implementations under open-sse/mcp-server/tools/ and registers them with the RPC dispatcher. It builds a method-to-tool mapping that enables runtime routing.
Tool metadata is aggregated in [catalog.ts](https://github.com/diegosouzapw/OmniRoute/blob/release/v3.8.50/open-sse/mcp-server/catalog.ts), which serves a machine-readable JSON description of each tool's name, parameters, and required scopes. Clients query this catalog to discover available capabilities without hardcoding method names.
The [runtimeHeartbeat.ts](https://github.com/diegosouzapw/OmniRoute/blob/release/v3.8.50/open-sse/mcp-server/runtimeHeartbeat.ts) component emits periodic health metrics and latency statistics, enabling monitoring dashboards to track the performance of the 110 registered tools.
JSON-RPC Request Processing Flow
The MCP server processes incoming requests through a strict five-phase pipeline defined in the source architecture:
- Request Ingestion: The transport layer in
httpTransport.tsreceives the HTTP POST request on port20128and unmarshals the JSON-RPC payload. - Identity Extraction:
httpAuthContext.tsvalidates the bearer token and constructs theCallerIdentityobject containing the caller's granted scopes. - Scope Verification:
scopeEnforcement.tscross-references the requested method's required scopes against the caller's permissions, rejecting insufficient privileges with a 403-equivalent JSON-RPC error. - Tool Dispatch:
toolSearch/handler.tslooks up the method name in the registry created bytoolSearch/register.tsand forwards the call to the concrete implementation (e.g.,tools/memoryTools.ts). - Response Serialization: The tool's return value is wrapped in a JSON-RPC 2.0 response object and transmitted back through the HTTP transport.
Practical Implementation Examples
Executing Tool Calls via cURL
The following request invokes the memory.get tool from tools/memoryTools.ts, which requires the memory scope:
curl -X POST http://localhost:20128/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <JWT-TOKEN>" \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"memory.get",
"params":{"key":"session:1234"}
}'
Using the Official Node.js Client
The @omniroute/open-sse/mcp-client library handles authentication and JSON-RPC plumbing automatically:
import { createMcpClient } from "@omniroute/open-sse/mcp-client";
const client = createMcpClient({
baseUrl: "http://localhost:20128/api/mcp",
token: process.env.OMNIROUTE_JWT,
});
async function fetchMemory() {
const resp = await client.call("memory.get", { key: "session:1234" });
console.log("Memory value:", resp.result);
}
Registering a Custom Tool
Developers can extend the server by adding new tools under open-sse/mcp-server/tools/ and exporting a registration function:
// open-sse/mcp-server/tools/customTools.ts
import { registerTool } from "../toolSearch/register";
registerTool({
name: "custom.echo",
scopes: ["advanced"],
handler: async ({ params }) => ({ echo: params.message }),
});
After rebuilding the server, the custom.echo method appears in the catalog and is accessible to clients possessing the advanced scope.
Summary
- OmniRoute's MCP server implements a JSON-RPC 2.0 interface in the
open-sse/mcp-server/directory, exposing 110 tools through a single HTTP endpoint. - Thirty-three permission scopes defined in
scopeEnforcement.tsprovide granular access control across functional domains likememory,skill, andradar. - Dynamic registration via
toolSearch/register.tsautomatically discovers tool modules and builds the method-to-handler mapping at runtime. - Strict request flow enforces authentication in
httpAuthContext.tsand authorization inscopeEnforcement.tsbefore dispatching to concrete tool implementations. - Machine-readable catalog served by
catalog.tsallows clients to discover tool signatures and required scopes without server-side changes.
Frequently Asked Questions
What communication protocol does the OmniRoute MCP server use?
The server implements JSON-RPC 2.0 over HTTP, accepting POST requests at the /api/mcp endpoint. This protocol standardizes request formatting, batch operations, and error handling across all 110 tools, enabling language-agnostic client implementations.
How does the scope enforcement mechanism prevent unauthorized access?
The scopeEnforcement.ts module intercepts every incoming request and compares the caller's granted scopes—extracted from JWT claims in httpAuthContext.ts—against the scopes declared by the target tool. If the caller lacks any required scope, the server returns a JSON-RPC error response before invoking the tool logic, ensuring zero unauthorized execution.
Can third-party developers register new tools with the MCP server?
Yes, developers can add custom tools by creating new files under open-sse/mcp-server/tools/ and calling registerTool() from toolSearch/register.ts. Each registration must specify the tool's JSON-RPC method name, required scopes from the 33 available options, and an async handler function. The tool becomes available immediately after server restart and appears in the catalog.ts output.
What is the purpose of the runtime heartbeat component?
The runtimeHeartbeat.ts module emits periodic health metrics including tool invocation latency, error rates, and throughput statistics. These metrics enable external monitoring systems to track the performance and availability of the MCP server's 110 tools across all 33 scopes without instrumenting individual tool implementations.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →