incur 0.4.10 → 0.4.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/dist/Mcp.d.ts.map +1 -1
- package/dist/Mcp.js +19 -1
- package/dist/Mcp.js.map +1 -1
- package/package.json +1 -1
- package/src/Mcp.test.ts +9 -2
- package/src/Mcp.ts +39 -2
package/dist/Mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mcp.d.ts","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Mcp.d.ts","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/Mcp.js
CHANGED
|
@@ -6,7 +6,10 @@ import * as Schema from './Schema.js';
|
|
|
6
6
|
/** Starts a stdio MCP server that exposes commands as tools. */
|
|
7
7
|
export async function serve(name, version, commands, options = {}) {
|
|
8
8
|
// Lazy: only runs when actually serving MCP, so plain command runs don't pay for the SDK import.
|
|
9
|
-
const
|
|
9
|
+
const stdio = importStdioModule();
|
|
10
|
+
const mcp = await import('@modelcontextprotocol/server');
|
|
11
|
+
const { fromJsonSchema, McpServer } = mcp;
|
|
12
|
+
const StdioServerTransport = await importStdioServerTransport(mcp, stdio);
|
|
10
13
|
const server = new McpServer({ name, version }, options.instructions ? { instructions: options.instructions } : undefined);
|
|
11
14
|
for (const tool of collectTools(commands, [])) {
|
|
12
15
|
const mergedShape = {
|
|
@@ -40,6 +43,21 @@ export async function serve(name, version, commands, options = {}) {
|
|
|
40
43
|
const transport = new StdioServerTransport(input, output);
|
|
41
44
|
await server.connect(transport);
|
|
42
45
|
}
|
|
46
|
+
async function importStdioServerTransport(mcp, stdio) {
|
|
47
|
+
const transport = mcp.StdioServerTransport;
|
|
48
|
+
if (transport)
|
|
49
|
+
return transport;
|
|
50
|
+
const result = await stdio;
|
|
51
|
+
if (result.error)
|
|
52
|
+
throw result.error;
|
|
53
|
+
return result.module.StdioServerTransport;
|
|
54
|
+
}
|
|
55
|
+
function importStdioModule() {
|
|
56
|
+
return importModule('@modelcontextprotocol/server/stdio')
|
|
57
|
+
.then((module) => ({ module }))
|
|
58
|
+
.catch((error) => ({ error }));
|
|
59
|
+
}
|
|
60
|
+
const importModule = (specifier) => import(specifier);
|
|
43
61
|
/** @internal Executes a tool call and returns a CallToolResult. */
|
|
44
62
|
export async function callTool(tool, params, options = {}) {
|
|
45
63
|
const allMiddleware = [
|
package/dist/Mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mcp.js","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Mcp.js","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Mcp.test.ts
CHANGED
|
@@ -84,14 +84,21 @@ async function mcpSession(
|
|
|
84
84
|
input.write(`${JSON.stringify(rpc)}\n`)
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
await new Promise((r) => setTimeout(r, 20))
|
|
87
|
+
await waitForResponses(chunks, messages.filter((msg) => msg.id !== undefined).length)
|
|
89
88
|
input.end()
|
|
90
89
|
await done
|
|
91
90
|
|
|
92
91
|
return chunks.map((c) => JSON.parse(c.trim()))
|
|
93
92
|
}
|
|
94
93
|
|
|
94
|
+
async function waitForResponses(chunks: string[], expected: number) {
|
|
95
|
+
const started = Date.now()
|
|
96
|
+
while (chunks.length < expected) {
|
|
97
|
+
if (Date.now() - started > 1_000) return
|
|
98
|
+
await new Promise((r) => setTimeout(r, 5))
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
95
102
|
describe('Mcp', () => {
|
|
96
103
|
test('initialize responds with server info', async () => {
|
|
97
104
|
const [res] = await mcpSession(createTestCommands(), [
|
package/src/Mcp.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Transport } from '@modelcontextprotocol/server'
|
|
1
2
|
import type { Readable, Writable } from 'node:stream'
|
|
2
3
|
import { z } from 'zod'
|
|
3
4
|
|
|
@@ -15,8 +16,10 @@ export async function serve(
|
|
|
15
16
|
options: serve.Options = {},
|
|
16
17
|
): Promise<void> {
|
|
17
18
|
// Lazy: only runs when actually serving MCP, so plain command runs don't pay for the SDK import.
|
|
18
|
-
const
|
|
19
|
-
|
|
19
|
+
const stdio = importStdioModule()
|
|
20
|
+
const mcp = await import('@modelcontextprotocol/server')
|
|
21
|
+
const { fromJsonSchema, McpServer } = mcp
|
|
22
|
+
const StdioServerTransport = await importStdioServerTransport(mcp, stdio)
|
|
20
23
|
|
|
21
24
|
const server = new McpServer(
|
|
22
25
|
{ name, version },
|
|
@@ -62,6 +65,40 @@ export async function serve(
|
|
|
62
65
|
await server.connect(transport)
|
|
63
66
|
}
|
|
64
67
|
|
|
68
|
+
type StdioServerTransport = new (
|
|
69
|
+
input?: Readable,
|
|
70
|
+
output?: Writable,
|
|
71
|
+
options?: { maxBufferSize?: number | undefined },
|
|
72
|
+
) => Transport
|
|
73
|
+
|
|
74
|
+
type StdioModule = {
|
|
75
|
+
StdioServerTransport: StdioServerTransport
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
type StdioImportResult =
|
|
79
|
+
| { module: unknown; error?: undefined }
|
|
80
|
+
| { module?: undefined; error: unknown }
|
|
81
|
+
|
|
82
|
+
async function importStdioServerTransport(
|
|
83
|
+
mcp: unknown,
|
|
84
|
+
stdio: Promise<StdioImportResult>,
|
|
85
|
+
): Promise<StdioServerTransport> {
|
|
86
|
+
const transport = (mcp as Partial<StdioModule>).StdioServerTransport
|
|
87
|
+
if (transport) return transport
|
|
88
|
+
|
|
89
|
+
const result = await stdio
|
|
90
|
+
if (result.error) throw result.error
|
|
91
|
+
return (result.module as StdioModule).StdioServerTransport
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function importStdioModule(): Promise<StdioImportResult> {
|
|
95
|
+
return importModule('@modelcontextprotocol/server/stdio')
|
|
96
|
+
.then((module) => ({ module }))
|
|
97
|
+
.catch((error: unknown) => ({ error }))
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const importModule = (specifier: string): Promise<unknown> => import(specifier)
|
|
101
|
+
|
|
65
102
|
export declare namespace serve {
|
|
66
103
|
/** Options for the MCP server. */
|
|
67
104
|
type Options = {
|