@agentplat/mcp 0.2.0-beta.1 → 0.2.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,74 @@
1
- # @agentplat/mcp
1
+ # `@agentplat/mcp`
2
2
 
3
- MCP binding contracts for AgentPlat.
3
+ MCP interoperability primitives for AgentPlat. The package supports the
4
+ stable `2025-11-25` protocol revision for the tool surface over Streamable
5
+ HTTP:
4
6
 
5
- This package defines MCP server metadata, tool bindings and registries so AgentPlat-compatible runtimes can connect tools and servers through a consistent interface.
7
+ - `McpRemoteClient` connects to a remote MCP server and lists or calls tools.
8
+ - `McpToolImporter` makes remote MCP tools available through an AgentPlat
9
+ `ToolRegistry`.
10
+ - `McpHttpServer` exposes a curated subset of AgentPlat tools to MCP clients.
11
+
12
+ The package deliberately does **not** resolve credentials, infer tenants, add
13
+ CORS, or permit arbitrary network destinations. Those decisions belong to the
14
+ embedding application or gateway.
15
+
16
+ ## Consume remote MCP tools
17
+
18
+ ```ts
19
+ import { McpRemoteClient, McpToolImporter } from '@agentplat/mcp';
20
+
21
+ const client = new McpRemoteClient({
22
+ url: 'https://tools.example.com/mcp',
23
+ clientInfo: { name: 'agentplat', version: '0.1.0' },
24
+ headers: async () => ({
25
+ authorization: `Bearer ${await tenantTokenProvider.getAccessToken()}`,
26
+ }),
27
+ });
28
+
29
+ await new McpToolImporter({
30
+ client,
31
+ registry: toolRegistry,
32
+ serverId: 'crm',
33
+ }).sync();
34
+ ```
35
+
36
+ The importer namespaces each generated tool as `<serverId>.<toolName>` and
37
+ stores the original name in metadata. Register only endpoints approved by your
38
+ egress policy; a user-supplied URL must never be passed straight to the client.
39
+
40
+ ## Expose AgentPlat tools
41
+
42
+ ```ts
43
+ import { McpHttpServer } from '@agentplat/mcp';
44
+
45
+ const server = new McpHttpServer({
46
+ serverInfo: { name: 'AgentPlat tools', version: '0.1.0' },
47
+ registry: toolRegistry,
48
+ async resolveExecutionContext(request) {
49
+ const identity = await authenticate(request);
50
+ if (!identity) return undefined;
51
+
52
+ return {
53
+ tenant: { tenantId: identity.tenantId, actor: identity.actor },
54
+ allowedToolIds: identity.allowedToolIds,
55
+ };
56
+ },
57
+ });
58
+
59
+ // For example, in a Fetch-compatible route handler:
60
+ export const POST = (request: Request) => server.handle(request);
61
+ ```
62
+
63
+ `resolveExecutionContext` runs before tool discovery and invocation. It must
64
+ derive the tenant from verified identity, enforce per-tenant tool allowlists,
65
+ and return `undefined` for unauthenticated requests. Keep raw provider tokens
66
+ out of tool metadata, event payloads, and Agent definitions.
67
+
68
+ ## Scope
69
+
70
+ This is intentionally a small, auditable base: `initialize`, `tools/list`,
71
+ `tools/call`, and `notifications/initialized`. Resources, prompts, tasks,
72
+ OAuth discovery, and long-running agents will be added as separate extensions.
73
+ Use A2A rather than MCP when another system must own an agent task lifecycle,
74
+ artifacts, streaming progress, or human approval state.
package/dist/index.d.ts CHANGED
@@ -1,8 +1,11 @@
1
- import type { AgentPlatID, Metadata } from '@agentplat/core';
2
- import type { ToolDefinition } from '@agentplat/tools';
1
+ import { type AgentPlatID, type JsonObject, type Metadata, type TenantContext } from '@agentplat/core';
2
+ import type { ToolDefinition, ToolRegistry } from '@agentplat/tools';
3
+ /** The latest stable MCP revision supported by this package. */
4
+ export declare const MCP_PROTOCOL_VERSION = "2025-11-25";
3
5
  export interface McpServerDefinition {
4
6
  id: AgentPlatID;
5
7
  name: string;
8
+ /** `http` is the Streamable HTTP transport. `sse` is retained for legacy registrations. */
6
9
  transport: 'stdio' | 'http' | 'sse';
7
10
  command?: string;
8
11
  args?: string[];
@@ -19,4 +22,101 @@ export interface McpRegistry {
19
22
  listServers(): Promise<McpServerDefinition[]>;
20
23
  listTools(serverId: AgentPlatID): Promise<McpToolBinding[]>;
21
24
  }
25
+ export interface McpClientInfo extends JsonObject {
26
+ name: string;
27
+ version: string;
28
+ }
29
+ export interface McpServerInfo extends JsonObject {
30
+ name: string;
31
+ version: string;
32
+ }
33
+ export interface McpRemoteTool {
34
+ name: string;
35
+ description?: string;
36
+ inputSchema?: JsonObject;
37
+ }
38
+ export interface McpToolCallResult {
39
+ content: Array<{
40
+ type: 'text';
41
+ text: string;
42
+ }>;
43
+ structuredContent?: JsonObject;
44
+ isError?: boolean;
45
+ }
46
+ export type McpRequestHeaders = Record<string, string>;
47
+ export interface McpRemoteClientOptions {
48
+ /** Streamable HTTP MCP endpoint. */
49
+ url: string;
50
+ clientInfo: McpClientInfo;
51
+ /** Injected for tests or runtimes that do not expose global fetch. */
52
+ fetch?: typeof globalThis.fetch;
53
+ /** Use this to supply short-lived OAuth tokens; never store them in a server definition. */
54
+ headers?: () => McpRequestHeaders | Promise<McpRequestHeaders>;
55
+ }
56
+ /**
57
+ * Small dependency-free Streamable HTTP client for the MCP tool surface.
58
+ *
59
+ * It intentionally owns only protocol framing. Credential acquisition,
60
+ * redirects, SSRF protection and tenant policy belong to the caller's HTTP
61
+ * client or gateway.
62
+ */
63
+ export declare class McpRemoteClient {
64
+ private readonly options;
65
+ private initialized;
66
+ private requestSequence;
67
+ private sessionId?;
68
+ private readonly fetchImplementation;
69
+ constructor(options: McpRemoteClientOptions);
70
+ initialize(): Promise<void>;
71
+ listTools(): Promise<McpRemoteTool[]>;
72
+ callTool(name: string, arguments_: JsonObject): Promise<McpToolCallResult>;
73
+ private request;
74
+ private notify;
75
+ private send;
76
+ }
77
+ export interface McpToolImporterOptions {
78
+ client: McpRemoteClient;
79
+ registry: ToolRegistry;
80
+ serverId: AgentPlatID;
81
+ /** Namespace imported tools so they cannot collide with local names. */
82
+ namePrefix?: string;
83
+ }
84
+ /** Registers remote MCP tools as governed AgentPlat tools. */
85
+ export declare class McpToolImporter {
86
+ private readonly options;
87
+ constructor(options: McpToolImporterOptions);
88
+ sync(): Promise<McpToolBinding[]>;
89
+ }
90
+ export interface McpServerExecutionContext {
91
+ tenant: TenantContext;
92
+ runId?: AgentPlatID;
93
+ credentials?: Record<string, string>;
94
+ metadata?: Metadata;
95
+ /** Omit to allow every tool; production resolvers should always set this. */
96
+ allowedToolIds?: AgentPlatID[];
97
+ }
98
+ export interface McpHttpServerOptions {
99
+ serverInfo: McpServerInfo;
100
+ registry: ToolRegistry;
101
+ /**
102
+ * Authentication and tenant resolution are deliberately host-owned. Returning
103
+ * undefined rejects the request before any tool metadata or behavior leaks.
104
+ */
105
+ resolveExecutionContext(request: Request): Promise<McpServerExecutionContext | undefined>;
106
+ }
107
+ /**
108
+ * Fetch-compatible MCP server for the tools surface.
109
+ *
110
+ * Mount `handle` in Hono, Next.js, Lambda adapters or any Web Request runtime.
111
+ * It does not add CORS, authentication or network egress policy on purpose.
112
+ */
113
+ export declare class McpHttpServer {
114
+ private readonly options;
115
+ constructor(options: McpHttpServerOptions);
116
+ handle(request: Request): Promise<Response>;
117
+ private listTools;
118
+ private callTool;
119
+ private jsonRpcResult;
120
+ private jsonRpcError;
121
+ }
22
122
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,WAAW,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,394 @@
1
- export {};
1
+ import { AgentPlatError, } from '@agentplat/core';
2
+ /** The latest stable MCP revision supported by this package. */
3
+ export const MCP_PROTOCOL_VERSION = '2025-11-25';
4
+ /**
5
+ * Small dependency-free Streamable HTTP client for the MCP tool surface.
6
+ *
7
+ * It intentionally owns only protocol framing. Credential acquisition,
8
+ * redirects, SSRF protection and tenant policy belong to the caller's HTTP
9
+ * client or gateway.
10
+ */
11
+ export class McpRemoteClient {
12
+ options;
13
+ initialized = false;
14
+ requestSequence = 0;
15
+ sessionId;
16
+ fetchImplementation;
17
+ constructor(options) {
18
+ this.options = options;
19
+ this.fetchImplementation = options.fetch ?? globalThis.fetch;
20
+ if (!this.fetchImplementation) {
21
+ throw new AgentPlatError('ADAPTER_ERROR', 'An MCP fetch implementation is required');
22
+ }
23
+ }
24
+ async initialize() {
25
+ if (this.initialized)
26
+ return;
27
+ const result = await this.request('initialize', {
28
+ protocolVersion: MCP_PROTOCOL_VERSION,
29
+ capabilities: {},
30
+ clientInfo: this.options.clientInfo,
31
+ }, false);
32
+ const version = result.protocolVersion;
33
+ if (typeof version !== 'string') {
34
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP server did not return a protocol version');
35
+ }
36
+ await this.notify('notifications/initialized');
37
+ this.initialized = true;
38
+ }
39
+ async listTools() {
40
+ await this.initialize();
41
+ const result = await this.request('tools/list', {});
42
+ const tools = result.tools;
43
+ if (!Array.isArray(tools)) {
44
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP server returned an invalid tools/list response');
45
+ }
46
+ return tools.map((tool) => parseRemoteTool(tool));
47
+ }
48
+ async callTool(name, arguments_) {
49
+ await this.initialize();
50
+ const result = await this.request('tools/call', {
51
+ name,
52
+ arguments: arguments_,
53
+ });
54
+ const content = result.content;
55
+ if (!Array.isArray(content)) {
56
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP server returned an invalid tools/call response');
57
+ }
58
+ return {
59
+ content: content.map((item) => parseTextContent(item)),
60
+ ...(isJsonObject(result.structuredContent)
61
+ ? { structuredContent: result.structuredContent }
62
+ : {}),
63
+ ...(typeof result.isError === 'boolean'
64
+ ? { isError: result.isError }
65
+ : {}),
66
+ };
67
+ }
68
+ async request(method, params, requireInitialization = true) {
69
+ if (requireInitialization && !this.initialized) {
70
+ throw new AgentPlatError('ADAPTER_ERROR', `MCP client must initialize before calling ${method}`);
71
+ }
72
+ const id = ++this.requestSequence;
73
+ const response = await this.send({ jsonrpc: '2.0', id, method, params });
74
+ if (response.status < 200 || response.status >= 300) {
75
+ throw new AgentPlatError('ADAPTER_ERROR', `MCP server returned HTTP ${response.status}`, {
76
+ statusCode: response.status,
77
+ details: (await response.text()).slice(0, 1_000),
78
+ });
79
+ }
80
+ const payload = await parseJsonRpcResponse(response);
81
+ if (payload.error) {
82
+ throw new AgentPlatError('ADAPTER_ERROR', `MCP ${method} failed: ${payload.error.message}`, {
83
+ details: payload.error,
84
+ });
85
+ }
86
+ if (!payload.result) {
87
+ throw new AgentPlatError('ADAPTER_ERROR', `MCP ${method} returned no result`);
88
+ }
89
+ return payload.result;
90
+ }
91
+ async notify(method) {
92
+ const response = await this.send({ jsonrpc: '2.0', method });
93
+ if (response.status < 200 || response.status >= 300) {
94
+ throw new AgentPlatError('ADAPTER_ERROR', `MCP notification ${method} returned HTTP ${response.status}`, {
95
+ statusCode: response.status,
96
+ });
97
+ }
98
+ }
99
+ async send(payload) {
100
+ const extraHeaders = (await this.options.headers?.()) ?? {};
101
+ const headers = {
102
+ accept: 'application/json, text/event-stream',
103
+ 'content-type': 'application/json',
104
+ 'mcp-protocol-version': MCP_PROTOCOL_VERSION,
105
+ ...extraHeaders,
106
+ };
107
+ if (this.sessionId)
108
+ headers['mcp-session-id'] = this.sessionId;
109
+ const response = await this.fetchImplementation(this.options.url, {
110
+ method: 'POST',
111
+ headers,
112
+ body: JSON.stringify(payload),
113
+ });
114
+ const returnedSessionId = response.headers.get('mcp-session-id');
115
+ if (returnedSessionId)
116
+ this.sessionId = returnedSessionId;
117
+ return response;
118
+ }
119
+ }
120
+ /** Registers remote MCP tools as governed AgentPlat tools. */
121
+ export class McpToolImporter {
122
+ options;
123
+ constructor(options) {
124
+ this.options = options;
125
+ }
126
+ async sync() {
127
+ const remoteTools = await this.options.client.listTools();
128
+ const prefix = this.options.namePrefix ?? `${this.options.serverId}.`;
129
+ const bindings = [];
130
+ for (const remoteTool of remoteTools) {
131
+ const definition = {
132
+ id: `${this.options.serverId}:${remoteTool.name}`,
133
+ name: `${prefix}${remoteTool.name}`,
134
+ description: remoteTool.description ?? `Remote MCP tool ${remoteTool.name}`,
135
+ parameters: asToolParameterSchema(remoteTool.inputSchema),
136
+ metadata: {
137
+ mcpServerId: this.options.serverId,
138
+ mcpToolName: remoteTool.name,
139
+ },
140
+ };
141
+ await this.options.registry.register(definition, new McpImportedToolHandler(this.options.client, remoteTool.name));
142
+ bindings.push({
143
+ serverId: this.options.serverId,
144
+ tool: definition,
145
+ externalName: remoteTool.name,
146
+ });
147
+ }
148
+ return bindings;
149
+ }
150
+ }
151
+ class McpImportedToolHandler {
152
+ client;
153
+ remoteName;
154
+ constructor(client, remoteName) {
155
+ this.client = client;
156
+ this.remoteName = remoteName;
157
+ }
158
+ async invoke(input, _context) {
159
+ const result = await this.client.callTool(this.remoteName, input);
160
+ if (result.isError) {
161
+ return {
162
+ ok: false,
163
+ errorMessage: result.content.map((item) => item.text).join('\n') ||
164
+ 'Remote MCP tool failed',
165
+ };
166
+ }
167
+ return {
168
+ ok: true,
169
+ value: result.structuredContent ??
170
+ result.content.map((item) => item.text).join('\n'),
171
+ };
172
+ }
173
+ }
174
+ /**
175
+ * Fetch-compatible MCP server for the tools surface.
176
+ *
177
+ * Mount `handle` in Hono, Next.js, Lambda adapters or any Web Request runtime.
178
+ * It does not add CORS, authentication or network egress policy on purpose.
179
+ */
180
+ export class McpHttpServer {
181
+ options;
182
+ constructor(options) {
183
+ this.options = options;
184
+ }
185
+ async handle(request) {
186
+ if (request.method !== 'POST') {
187
+ return new Response('Method Not Allowed', {
188
+ status: 405,
189
+ headers: { allow: 'POST' },
190
+ });
191
+ }
192
+ let message;
193
+ try {
194
+ message = asJsonObject(await request.json());
195
+ }
196
+ catch {
197
+ return this.jsonRpcError(null, -32700, 'Parse error');
198
+ }
199
+ const id = jsonRpcId(message.id);
200
+ const method = typeof message.method === 'string' ? message.method : undefined;
201
+ if (message.jsonrpc !== '2.0' || !method) {
202
+ return this.jsonRpcError(id, -32600, 'Invalid Request');
203
+ }
204
+ if (method === 'notifications/initialized') {
205
+ return new Response(null, { status: 202 });
206
+ }
207
+ try {
208
+ const context = await this.options.resolveExecutionContext(request);
209
+ if (!context) {
210
+ return this.jsonRpcError(id, -32001, 'Unauthorized');
211
+ }
212
+ switch (method) {
213
+ case 'initialize':
214
+ return this.jsonRpcResult(id, {
215
+ protocolVersion: MCP_PROTOCOL_VERSION,
216
+ capabilities: { tools: { listChanged: false } },
217
+ serverInfo: this.options.serverInfo,
218
+ });
219
+ case 'tools/list':
220
+ return this.listTools(id, context);
221
+ case 'tools/call':
222
+ if (!isJsonObject(message.params)) {
223
+ return this.jsonRpcError(id, -32602, 'tools/call requires object params');
224
+ }
225
+ return this.callTool(id, message.params, context);
226
+ default:
227
+ return this.jsonRpcError(id, -32601, `Method not found: ${method}`);
228
+ }
229
+ }
230
+ catch (error) {
231
+ const messageText = error instanceof Error ? error.message : 'Internal server error';
232
+ return this.jsonRpcError(id, -32603, messageText);
233
+ }
234
+ }
235
+ async listTools(id, context) {
236
+ const tools = await this.options.registry.list();
237
+ const allowed = filterAllowedTools(tools, context.allowedToolIds);
238
+ return this.jsonRpcResult(id, {
239
+ tools: allowed.map((tool) => ({
240
+ name: tool.name,
241
+ description: tool.description,
242
+ inputSchema: toolSchemaAsJsonObject(tool.parameters),
243
+ })),
244
+ });
245
+ }
246
+ async callTool(id, params, context) {
247
+ const name = params.name;
248
+ if (typeof name !== 'string' || !name) {
249
+ return this.jsonRpcError(id, -32602, 'tools/call requires a tool name');
250
+ }
251
+ if (params.arguments !== undefined && !isJsonObject(params.arguments)) {
252
+ return this.jsonRpcError(id, -32602, 'tools/call arguments must be an object');
253
+ }
254
+ const input = params.arguments ?? {};
255
+ const tool = (await this.options.registry.list()).find((candidate) => candidate.name === name);
256
+ if (!tool || !isToolAllowed(tool.id, context.allowedToolIds)) {
257
+ return this.jsonRpcError(id, -32602, `Tool is not available: ${name}`);
258
+ }
259
+ const registered = await this.options.registry.get(tool.id);
260
+ if (!registered) {
261
+ return this.jsonRpcError(id, -32602, `Tool is not available: ${name}`);
262
+ }
263
+ const result = await registered.handler.invoke(input, {
264
+ tenant: context.tenant,
265
+ toolId: tool.id,
266
+ ...(context.runId ? { runId: context.runId } : {}),
267
+ ...(context.credentials ? { credentials: context.credentials } : {}),
268
+ ...(context.metadata ? { metadata: context.metadata } : {}),
269
+ });
270
+ return this.jsonRpcResult(id, toolResultToMcp(result));
271
+ }
272
+ jsonRpcResult(id, result) {
273
+ return Response.json({ jsonrpc: '2.0', id, result });
274
+ }
275
+ jsonRpcError(id, code, message) {
276
+ return Response.json({ jsonrpc: '2.0', id, error: { code, message } });
277
+ }
278
+ }
279
+ function asToolParameterSchema(schema) {
280
+ if (!schema || schema.type !== 'object')
281
+ return { type: 'object' };
282
+ return schema;
283
+ }
284
+ function toolSchemaAsJsonObject(schema) {
285
+ return schema;
286
+ }
287
+ function parseRemoteTool(value) {
288
+ const tool = asJsonObject(value);
289
+ if (typeof tool.name !== 'string' || !tool.name) {
290
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP tool is missing its name');
291
+ }
292
+ return {
293
+ name: tool.name,
294
+ ...(typeof tool.description === 'string'
295
+ ? { description: tool.description }
296
+ : {}),
297
+ ...(isJsonObject(tool.inputSchema)
298
+ ? { inputSchema: tool.inputSchema }
299
+ : {}),
300
+ };
301
+ }
302
+ function parseTextContent(value) {
303
+ const content = asJsonObject(value);
304
+ if (content.type !== 'text' || typeof content.text !== 'string') {
305
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP tool content must be a text block');
306
+ }
307
+ return { type: 'text', text: content.text };
308
+ }
309
+ async function parseJsonRpcResponse(response) {
310
+ let payload;
311
+ try {
312
+ payload = await response.json();
313
+ }
314
+ catch {
315
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP server did not return JSON');
316
+ }
317
+ const value = asJsonObject(payload);
318
+ if (value.jsonrpc !== '2.0' || !('id' in value)) {
319
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP server returned an invalid JSON-RPC response');
320
+ }
321
+ return {
322
+ jsonrpc: '2.0',
323
+ id: jsonRpcId(value.id),
324
+ ...(isJsonObject(value.result) ? { result: value.result } : {}),
325
+ ...(isJsonObject(value.error)
326
+ ? { error: parseJsonRpcError(value.error) }
327
+ : {}),
328
+ };
329
+ }
330
+ function parseJsonRpcError(value) {
331
+ if (typeof value.code !== 'number' || typeof value.message !== 'string') {
332
+ throw new AgentPlatError('ADAPTER_ERROR', 'MCP server returned an invalid JSON-RPC error');
333
+ }
334
+ return {
335
+ code: value.code,
336
+ message: value.message,
337
+ ...(isJsonValue(value.data) ? { data: value.data } : {}),
338
+ };
339
+ }
340
+ function toolResultToMcp(result) {
341
+ if (!result.ok) {
342
+ return {
343
+ content: [
344
+ { type: 'text', text: result.errorMessage ?? 'Tool execution failed' },
345
+ ],
346
+ isError: true,
347
+ };
348
+ }
349
+ const value = result.value ?? null;
350
+ return {
351
+ content: [
352
+ {
353
+ type: 'text',
354
+ text: typeof value === 'string' ? value : JSON.stringify(value),
355
+ },
356
+ ],
357
+ ...(isJsonObject(value) ? { structuredContent: value } : {}),
358
+ };
359
+ }
360
+ function filterAllowedTools(tools, allowedToolIds) {
361
+ return allowedToolIds
362
+ ? tools.filter((tool) => isToolAllowed(tool.id, allowedToolIds))
363
+ : tools;
364
+ }
365
+ function isToolAllowed(toolId, allowedToolIds) {
366
+ return !allowedToolIds || allowedToolIds.includes(toolId);
367
+ }
368
+ function asJsonObject(value) {
369
+ if (!isJsonObject(value)) {
370
+ throw new AgentPlatError('VALIDATION_ERROR', 'Expected a JSON object');
371
+ }
372
+ return value;
373
+ }
374
+ function isJsonObject(value) {
375
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
376
+ }
377
+ function isJsonValue(value) {
378
+ if (value === null ||
379
+ typeof value === 'string' ||
380
+ typeof value === 'number' ||
381
+ typeof value === 'boolean')
382
+ return true;
383
+ if (Array.isArray(value))
384
+ return value.every(isJsonValue);
385
+ return isJsonObject(value) && Object.values(value).every(isJsonValue);
386
+ }
387
+ function jsonRpcId(value) {
388
+ return typeof value === 'string' ||
389
+ typeof value === 'number' ||
390
+ value === null
391
+ ? value
392
+ : null;
393
+ }
2
394
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentplat/mcp",
3
- "version": "0.2.0-beta.1",
3
+ "version": "0.2.0-beta.11",
4
4
  "description": "MCP server, tool binding and registry contracts for AgentPlat.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -18,8 +18,11 @@
18
18
  "README.md"
19
19
  ],
20
20
  "dependencies": {
21
- "@agentplat/tools": "^0.2.0-beta.1",
22
- "@agentplat/core": "^0.2.0-beta.1"
21
+ "@agentplat/core": "^0.2.0-beta.11",
22
+ "@agentplat/tools": "^0.2.0-beta.11"
23
+ },
24
+ "devDependencies": {
25
+ "tsx": "^4.20.0"
23
26
  },
24
27
  "publishConfig": {
25
28
  "access": "public"
@@ -32,6 +35,7 @@
32
35
  "scripts": {
33
36
  "build": "tsc -p tsconfig.json",
34
37
  "type-check": "tsc -p tsconfig.json --noEmit",
38
+ "test": "tsx --test tests/*.test.ts",
35
39
  "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\""
36
40
  }
37
41
  }