Skip to main content
Home

Truly Useful Anti-Patterns: Client-Tool-Execution MCP Server

This package works with Node.js, Deno, Bun, BrowsersIt is unknown whether this package works with Cloudflare Workers
It is unknown whether this package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
70%
Published
a week ago (0.0.3)
class ClientExecServer

Constructors

new
ClientExecServer(
server: Server,
clientId: string,
)

Properties

private
pendingRequests: Map<string, { resolve: (value: CallToolResult) => void; reject: (reason: Error | McpError) => void; timeout: number; }>
private
server: Server
private
tools: Map<string, Tool>

Methods

callTool(
toolCallHandler: ((
request: CallToolRequest,
extra?: unknown,
) => Promise<CallToolResult>) | undefined
,
request: CallToolRequest,
extra?: unknown,
): Promise<CallToolResult>

Call tool

cleanup(): void

Clean up resources

private
getOriginalToolName(namespacedName: string): string

Extract original tool name from namespaced name

private
getServerRequestHandler<
TReq,
TRes,
>
(method: string): ((
request: TReq,
extra?: unknown,
) => Promise<TRes>) | undefined

Calls a JSON-RPC method on the server.

getStatus(): { clientId: string; registeredTools: string[]; connectedClients: string[]; clientToolMapping: Record<string, string[]>; pendingRequests: number; }

Get status information

private
getToolName(
clientId: string,
toolName: string,
): string

Generate tool name with optional namespacing

Handle client disconnect

handleClientResponse(params: { id: string; success: boolean; result?: unknown; error?: string; }): { status: string; }

Handle tool execution response from client

handleClientToolRegistration(params: { clientId: string; tools: Array<{ name: string; description: string; inputSchema: Record<string, unknown>; }>; }): { status: string; registeredTools: string[]; conflicts: string[]; }

Handle client tool registration

listTools(
toolListHandler: ((
extra?: unknown,
) => Promise<ListToolsResult>) | undefined
,
extra: unknown,
): Promise<ListToolsResult>

List all tools

private
notifyClientExecute(
requestId: string,
toolName: string,
args: Record<string, unknown>,
): Promise<void>

Notify client to execute tool via notification

Register tools (static registration for backward compatibility)

setNamespacing(enabled: boolean): void

Enable or disable tool namespacing for multi-client isolation

setRequestTimeout(timeoutMs: number): void

Set request timeout

private
setupStandardHandlers(): void

Unregister all tools from a specific client

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@mcpc/cmcp

Import symbol

import { ClientExecServer } from "@mcpc/cmcp/server";
or

Import directly with a jsr specifier

import { ClientExecServer } from "jsr:@mcpc/cmcp/server";

Add Package

pnpm i jsr:@mcpc/cmcp
or (using pnpm 10.8 or older)
pnpm dlx jsr add @mcpc/cmcp

Import symbol

import { ClientExecServer } from "@mcpc/cmcp/server";

Add Package

yarn add jsr:@mcpc/cmcp
or (using Yarn 4.8 or older)
yarn dlx jsr add @mcpc/cmcp

Import symbol

import { ClientExecServer } from "@mcpc/cmcp/server";

Add Package

vlt install jsr:@mcpc/cmcp

Import symbol

import { ClientExecServer } from "@mcpc/cmcp/server";

Add Package

npx jsr add @mcpc/cmcp

Import symbol

import { ClientExecServer } from "@mcpc/cmcp/server";

Add Package

bunx jsr add @mcpc/cmcp

Import symbol

import { ClientExecServer } from "@mcpc/cmcp/server";