@hs-x/mcp 0.3.0 → 0.3.7
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 +44 -7
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +67 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +47 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +784 -146
- package/dist/index.js.map +1 -1
- package/dist/stdio-framing.d.ts +22 -0
- package/dist/stdio-framing.d.ts.map +1 -0
- package/dist/stdio-framing.js +61 -0
- package/dist/stdio-framing.js.map +1 -0
- package/dist/stdio.js +31 -12
- package/dist/stdio.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# @hs-x/mcp
|
|
2
2
|
|
|
3
3
|
The public HS-X MCP server, for developer-side coding agents. It exposes the
|
|
4
|
-
same project substrate the `hs-x` CLI runs on — status, validation,
|
|
5
|
-
|
|
4
|
+
same safe project substrate the `hs-x` CLI runs on — status, validation,
|
|
5
|
+
existing-session inspection, and docs — over a transport-independent JSON-RPC handler (`callMcpTool()`)
|
|
6
6
|
plus a stdio entrypoint.
|
|
7
7
|
|
|
8
8
|
## Tools
|
|
@@ -11,22 +11,59 @@ plus a stdio entrypoint.
|
|
|
11
11
|
| --- | --- |
|
|
12
12
|
| `hsx.status` | Local project status, via the same substrate as `hs-x status` |
|
|
13
13
|
| `hsx.check` | Runs `hs-x check` and returns structured diagnostics |
|
|
14
|
-
| `hsx.dev.
|
|
15
|
-
| `hsx.dev.invoke` | Invokes one capability through the **production** runtime router — same validation, context, handler, and result envelope a deployed Worker runs; fixture defaults fill the payload |
|
|
16
|
-
| `hsx.dev.invoke_last` | Replays the last recorded invocation (`.hs-x/last-invocation.json`) — the failure-replay loop |
|
|
17
|
-
| `hsx.dev.session.start` / `.status` / `.stop` | Manages a background dev server for the project (one session per project) |
|
|
14
|
+
| `hsx.dev.session.status` / `.stop` | Inspects or safely stops an existing, identity-verified project dev session |
|
|
18
15
|
| `hsx.dev.logs` | The merged log surface: tails the dev-session log and, when the project has a deployed app binding, folds in HubSpot app-log rows — the same timeline as `hs-x logs` |
|
|
19
|
-
| `hsx.secrets.hubspot_oauth.set` | Stores a HubSpot app OAuth client secret for one account/project/environment/app |
|
|
16
|
+
| `hsx.secrets.hubspot_oauth.set` | Stores a HubSpot app OAuth client secret for one account/project/environment/app after explicit `confirm: true` |
|
|
20
17
|
| `hsx.docs.search` / `hsx.docs.fetch` | Searches the HS-X docs and fetches a page as clean markdown |
|
|
21
18
|
|
|
22
19
|
Most tools take a `root` argument pointing at the local project directory.
|
|
23
20
|
|
|
21
|
+
Every advertised input schema is closed at the top level
|
|
22
|
+
(`additionalProperties: false`). Required values and stable bounds are declared
|
|
23
|
+
in `tools/list` and enforced by the dispatcher before a tool performs project,
|
|
24
|
+
process, filesystem, or network work.
|
|
25
|
+
|
|
26
|
+
For `tools/call`, malformed JSON-RPC envelopes and unknown tool names remain
|
|
27
|
+
JSON-RPC errors. Once a known tool has been selected, invalid arguments and
|
|
28
|
+
execution failures are returned as MCP tool results with `isError: true` and a
|
|
29
|
+
text error payload. Clients should check `isError` before consuming the text
|
|
30
|
+
content. Direct callers of `callMcpTool()` receive the same failures as rejected
|
|
31
|
+
promises.
|
|
32
|
+
|
|
33
|
+
## Security gates
|
|
34
|
+
|
|
35
|
+
Project-code execution tools are not advertised by the local MCP server. The
|
|
36
|
+
former environment-variable opt-in was removed because it executed project code
|
|
37
|
+
inside the credential-bearing MCP process. Use the CLI directly for local
|
|
38
|
+
invocation and dev-server startup until HS-X has a separately deployed,
|
|
39
|
+
credential-isolated sandbox service.
|
|
40
|
+
|
|
41
|
+
`hsx.secrets.hubspot_oauth.set` sends credentials only to the exact public HTTPS
|
|
42
|
+
origin configured by the server's `HSX_CONTROL_PLANE_URL` (default
|
|
43
|
+
`https://api.hs-x.dev`). Tool calls cannot override that destination. Origins
|
|
44
|
+
with credentials, paths, queries, fragments, loopback, or private IP addresses
|
|
45
|
+
are rejected. The production HTTPS connection is pinned to an address from that
|
|
46
|
+
validated DNS result while TLS still verifies the configured hostname; redirects
|
|
47
|
+
are not followed and responses are bounded to 64 KiB. The call must also include
|
|
48
|
+
`confirm: true`; missing or false confirmation is rejected before the server
|
|
49
|
+
reads its bearer credential, resolves the destination, or starts transport.
|
|
50
|
+
Credential responses must be valid UTF-8 JSON. Docs responses are also read as
|
|
51
|
+
bounded streams: 1 MiB for the catalog and 2 MiB for a page, both with fatal
|
|
52
|
+
UTF-8 decoding so a bad upstream cannot grow the MCP process without bound.
|
|
53
|
+
|
|
24
54
|
## Running it
|
|
25
55
|
|
|
26
56
|
The stdio entrypoint speaks MCP over stdin/stdout, so any MCP-capable agent can
|
|
27
57
|
launch it as a subprocess. For embedding, call `callMcpTool(name, args)`
|
|
28
58
|
directly against the same dispatcher.
|
|
29
59
|
|
|
60
|
+
Requests use newline-delimited JSON-RPC and each line is limited to 1 MiB of
|
|
61
|
+
UTF-8 bytes. The transport reports an invalid-request error as soon as a line
|
|
62
|
+
crosses that limit, drops its buffered prefix, discards through the next
|
|
63
|
+
newline, and then continues serving later requests. This keeps an unterminated
|
|
64
|
+
or multi-byte oversized line from growing the server's input buffer without
|
|
65
|
+
bound.
|
|
66
|
+
|
|
30
67
|
## Part of HS-X
|
|
31
68
|
|
|
32
69
|
HS-X is a leaveable, type-safe HubSpot app framework on Cloudflare Workers.
|
package/dist/config.d.ts
CHANGED
|
@@ -7,4 +7,10 @@ export interface McpConfig {
|
|
|
7
7
|
readonly docsUrl: URL;
|
|
8
8
|
}
|
|
9
9
|
export declare function loadMcpConfig(env?: NodeJS.ProcessEnv): McpConfig;
|
|
10
|
+
/**
|
|
11
|
+
* Credential-bearing MCP calls are pinned to one administrator-configured
|
|
12
|
+
* public HTTPS origin. Tool arguments can never widen this destination.
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateControlPlaneOrigin(input: URL): URL;
|
|
15
|
+
export declare function isPrivateOrLoopbackHostname(rawHostname: string): boolean;
|
|
10
16
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;CACvB;AAuCD,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,CAG7E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAc1D;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAOxE"}
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isIP } from 'node:net';
|
|
1
2
|
import { Config, ConfigProvider, Effect, Option } from 'effect';
|
|
2
3
|
const DEFAULT_MCP_CONTROL_PLANE_URL = 'https://api.hs-x.dev';
|
|
3
4
|
const DEFAULT_MCP_DOCS_URL = 'https://hs-x.dev';
|
|
@@ -23,7 +24,72 @@ function mcpConfigProvider(env = process.env) {
|
|
|
23
24
|
return ConfigProvider.fromMap(values, { pathDelim: '_', seqDelim: ',' });
|
|
24
25
|
}
|
|
25
26
|
export function loadMcpConfig(env = process.env) {
|
|
26
|
-
|
|
27
|
+
const config = Effect.runSync(Effect.withConfigProvider(mcpConfigProvider(env))(mcpConfig));
|
|
28
|
+
return { ...config, controlPlaneUrl: validateControlPlaneOrigin(config.controlPlaneUrl) };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Credential-bearing MCP calls are pinned to one administrator-configured
|
|
32
|
+
* public HTTPS origin. Tool arguments can never widen this destination.
|
|
33
|
+
*/
|
|
34
|
+
export function validateControlPlaneOrigin(input) {
|
|
35
|
+
if (input.protocol !== 'https:') {
|
|
36
|
+
throw new Error('HSX_CONTROL_PLANE_URL must use HTTPS.');
|
|
37
|
+
}
|
|
38
|
+
if (input.username || input.password) {
|
|
39
|
+
throw new Error('HSX_CONTROL_PLANE_URL must not contain user information.');
|
|
40
|
+
}
|
|
41
|
+
if (input.pathname !== '/' || input.search || input.hash) {
|
|
42
|
+
throw new Error('HSX_CONTROL_PLANE_URL must be an origin without a path, query, or fragment.');
|
|
43
|
+
}
|
|
44
|
+
if (isPrivateOrLoopbackHostname(input.hostname)) {
|
|
45
|
+
throw new Error('HSX_CONTROL_PLANE_URL must not target a private or loopback host.');
|
|
46
|
+
}
|
|
47
|
+
return new URL(input.origin);
|
|
48
|
+
}
|
|
49
|
+
export function isPrivateOrLoopbackHostname(rawHostname) {
|
|
50
|
+
const hostname = rawHostname.replace(/^\[|\]$/g, '').toLowerCase();
|
|
51
|
+
if (hostname === 'localhost' || hostname.endsWith('.localhost'))
|
|
52
|
+
return true;
|
|
53
|
+
const kind = isIP(hostname);
|
|
54
|
+
if (kind === 4)
|
|
55
|
+
return isPrivateIpv4(hostname);
|
|
56
|
+
if (kind === 6)
|
|
57
|
+
return isPrivateIpv6(hostname);
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
function isPrivateIpv4(address) {
|
|
61
|
+
const octets = address.split('.').map(Number);
|
|
62
|
+
const [a = 0, b = 0] = octets;
|
|
63
|
+
return (a === 0 ||
|
|
64
|
+
a === 10 ||
|
|
65
|
+
a === 127 ||
|
|
66
|
+
(a === 100 && b >= 64 && b <= 127) ||
|
|
67
|
+
(a === 169 && b === 254) ||
|
|
68
|
+
(a === 172 && b >= 16 && b <= 31) ||
|
|
69
|
+
(a === 192 && b === 168));
|
|
70
|
+
}
|
|
71
|
+
function isPrivateIpv6(address) {
|
|
72
|
+
if (address === '::' || address === '::1')
|
|
73
|
+
return true;
|
|
74
|
+
const first = Number.parseInt(address.split(':', 1)[0] ?? '', 16);
|
|
75
|
+
if ((first & 0xfe00) === 0xfc00)
|
|
76
|
+
return true; // fc00::/7 unique local
|
|
77
|
+
if ((first & 0xffc0) === 0xfe80)
|
|
78
|
+
return true; // fe80::/10 link-local
|
|
79
|
+
if ((first & 0xff00) === 0xff00)
|
|
80
|
+
return true; // multicast
|
|
81
|
+
if (address.startsWith('::ffff:')) {
|
|
82
|
+
const suffix = address.slice('::ffff:'.length);
|
|
83
|
+
if (isIP(suffix) === 4)
|
|
84
|
+
return isPrivateIpv4(suffix);
|
|
85
|
+
const [highRaw, lowRaw] = suffix.split(':');
|
|
86
|
+
const high = Number.parseInt(highRaw ?? '', 16);
|
|
87
|
+
const low = Number.parseInt(lowRaw ?? '', 16);
|
|
88
|
+
if (Number.isFinite(high) && Number.isFinite(low)) {
|
|
89
|
+
return isPrivateIpv4(`${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
27
93
|
}
|
|
28
94
|
function splitAllowedRoots(value) {
|
|
29
95
|
return value
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAWhE,MAAM,6BAA6B,GAAG,sBAAsB,CAAC;AAC7D,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB;IACD,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxF,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,6BAA6B,CAAC,CAAC,EAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB;IACD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAClC,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,EACjD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB;CACF,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC,EAAE;IACN,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,eAAe,EAAE,MAAM,CAAC,eAAe;IACvC,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAC,CACJ,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAWhE,MAAM,6BAA6B,GAAG,sBAAsB,CAAC;AAC7D,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB;IACD,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxF,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,6BAA6B,CAAC,CAAC,EAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB;IACD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAClC,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,EACjD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB;CACF,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC,EAAE;IACN,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,eAAe,EAAE,MAAM,CAAC,eAAe;IACvC,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAC,CACJ,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5F,OAAO,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,0BAA0B,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAU;IACnD,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,WAAmB;IAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IAC9B,OAAO,CACL,CAAC,KAAK,CAAC;QACP,CAAC,KAAK,EAAE;QACR,CAAC,KAAK,GAAG;QACT,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;QAClC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;QACxB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CACzB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;IACtE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,uBAAuB;IACrE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,YAAY;IAC1D,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,aAAa,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import type { McpConfig } from './config.js';
|
|
|
2
2
|
export declare const MCP_VERSION: string;
|
|
3
3
|
export declare const MCP_PROTOCOL_VERSION = "2024-11-05";
|
|
4
4
|
export interface JsonRpcRequest {
|
|
5
|
-
readonly jsonrpc
|
|
6
|
-
readonly id?: string | number
|
|
7
|
-
readonly method
|
|
8
|
-
readonly params?: unknown
|
|
5
|
+
readonly jsonrpc: '2.0';
|
|
6
|
+
readonly id?: string | number;
|
|
7
|
+
readonly method: string;
|
|
8
|
+
readonly params?: Record<string, unknown>;
|
|
9
9
|
}
|
|
10
10
|
export interface JsonRpcSuccess {
|
|
11
11
|
readonly jsonrpc: '2.0';
|
|
@@ -24,22 +24,63 @@ export type JsonRpcResponse = JsonRpcSuccess | JsonRpcFailure;
|
|
|
24
24
|
export interface McpRequestContext {
|
|
25
25
|
readonly cwd: string;
|
|
26
26
|
readonly config?: McpConfig;
|
|
27
|
+
/** Test/embedding seam for HTTP. Stdio leaves this unset. */
|
|
28
|
+
readonly fetch?: typeof fetch;
|
|
29
|
+
/** Test/embedding seam for public-address validation before secret transfer. */
|
|
30
|
+
readonly lookup?: ControlPlaneLookup;
|
|
31
|
+
/** Test seam for the production DNS-pinned credential request. */
|
|
32
|
+
readonly credentialRequest?: CredentialRequest;
|
|
33
|
+
}
|
|
34
|
+
export type ControlPlaneLookup = (hostname: string) => Promise<readonly {
|
|
35
|
+
readonly address: string;
|
|
36
|
+
readonly family: number;
|
|
37
|
+
}[]>;
|
|
38
|
+
export interface CredentialRequestInput {
|
|
39
|
+
readonly url: URL;
|
|
40
|
+
readonly addresses: readonly {
|
|
41
|
+
readonly address: string;
|
|
42
|
+
readonly family: number;
|
|
43
|
+
}[];
|
|
44
|
+
readonly authorization: string;
|
|
45
|
+
readonly body: string;
|
|
27
46
|
}
|
|
47
|
+
export type CredentialRequest = (input: CredentialRequestInput) => Promise<{
|
|
48
|
+
readonly status: number;
|
|
49
|
+
readonly body: unknown;
|
|
50
|
+
}>;
|
|
28
51
|
export interface McpTool {
|
|
29
52
|
readonly name: string;
|
|
30
53
|
readonly description: string;
|
|
31
54
|
readonly inputSchema: {
|
|
32
55
|
readonly type: 'object';
|
|
33
|
-
readonly properties: Record<string,
|
|
56
|
+
readonly properties: Readonly<Record<string, McpJsonSchema>>;
|
|
57
|
+
readonly required?: readonly string[];
|
|
58
|
+
readonly additionalProperties: false;
|
|
34
59
|
};
|
|
35
60
|
}
|
|
61
|
+
interface McpJsonSchema {
|
|
62
|
+
readonly type: 'string' | 'number' | 'integer' | 'boolean' | 'object';
|
|
63
|
+
readonly description?: string;
|
|
64
|
+
readonly minLength?: number;
|
|
65
|
+
readonly maxLength?: number;
|
|
66
|
+
readonly minimum?: number;
|
|
67
|
+
readonly maximum?: number;
|
|
68
|
+
readonly enum?: readonly (string | number)[];
|
|
69
|
+
readonly pattern?: string;
|
|
70
|
+
readonly properties?: Readonly<Record<string, McpJsonSchema>>;
|
|
71
|
+
readonly required?: readonly string[];
|
|
72
|
+
readonly additionalProperties?: boolean;
|
|
73
|
+
readonly default?: string | number;
|
|
74
|
+
}
|
|
36
75
|
export interface McpToolResult {
|
|
37
76
|
readonly content: readonly {
|
|
38
77
|
readonly type: 'text';
|
|
39
78
|
readonly text: string;
|
|
40
79
|
}[];
|
|
80
|
+
readonly isError?: boolean;
|
|
41
81
|
}
|
|
42
82
|
export declare function listMcpTools(): readonly McpTool[];
|
|
43
|
-
export declare function handleMcpRequest(
|
|
83
|
+
export declare function handleMcpRequest(input: unknown, context: McpRequestContext): Promise<JsonRpcResponse | undefined>;
|
|
44
84
|
export declare function callMcpTool(name: string, args: Record<string, unknown>, context: McpRequestContext): Promise<McpToolResult>;
|
|
85
|
+
export {};
|
|
45
86
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|