@toolgrain/mcp 0.3.0-alpha.1 → 0.3.0-alpha.2
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/CHANGELOG.md +12 -0
- package/README.md +10 -0
- package/dist/apps.d.ts +9 -0
- package/dist/apps.d.ts.map +1 -0
- package/dist/apps.js +21 -0
- package/dist/apps.js.map +1 -0
- package/dist/dispatcher.d.ts +2 -1
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +3 -3
- package/dist/dispatcher.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy/dispatcher.d.ts +2 -1
- package/dist/legacy/dispatcher.d.ts.map +1 -1
- package/dist/legacy/dispatcher.js +23 -8
- package/dist/legacy/dispatcher.js.map +1 -1
- package/dist/legacy/handlers.d.ts +1 -1
- package/dist/legacy/handlers.d.ts.map +1 -1
- package/dist/legacy/handlers.js +2 -2
- package/dist/legacy/handlers.js.map +1 -1
- package/dist/modern/dispatcher.d.ts +2 -1
- package/dist/modern/dispatcher.d.ts.map +1 -1
- package/dist/modern/dispatcher.js +22 -8
- package/dist/modern/dispatcher.js.map +1 -1
- package/dist/modern/handlers.d.ts +1 -1
- package/dist/modern/handlers.d.ts.map +1 -1
- package/dist/modern/handlers.js +2 -2
- package/dist/modern/handlers.js.map +1 -1
- package/dist/modern/results.d.ts +6 -0
- package/dist/modern/results.d.ts.map +1 -1
- package/dist/modern/results.js +9 -0
- package/dist/modern/results.js.map +1 -1
- package/dist/resources/definition.d.ts +45 -0
- package/dist/resources/definition.d.ts.map +1 -0
- package/dist/resources/definition.js +46 -0
- package/dist/resources/definition.js.map +1 -0
- package/dist/resources/registry.d.ts +13 -0
- package/dist/resources/registry.d.ts.map +1 -0
- package/dist/resources/registry.js +48 -0
- package/dist/resources/registry.js.map +1 -0
- package/dist/resources/requests.d.ts +13 -0
- package/dist/resources/requests.d.ts.map +1 -0
- package/dist/resources/requests.js +43 -0
- package/dist/resources/requests.js.map +1 -0
- package/dist/resources/validation.d.ts +33 -0
- package/dist/resources/validation.d.ts.map +1 -0
- package/dist/resources/validation.js +61 -0
- package/dist/resources/validation.js.map +1 -0
- package/dist/server.d.ts +7 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -3
- package/dist/server.js.map +1 -1
- package/dist/tools/context.d.ts +2 -2
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +1 -1
- package/dist/tools/rich-result.d.ts +19 -19
- package/dist/tools/rich-result.d.ts.map +1 -1
- package/dist/tools/rich-result.js.map +1 -1
- package/package.json +2 -2
- package/src/apps.ts +23 -0
- package/src/dispatcher.ts +4 -0
- package/src/index.ts +9 -0
- package/src/legacy/dispatcher.ts +55 -13
- package/src/legacy/handlers.ts +2 -1
- package/src/modern/dispatcher.ts +57 -21
- package/src/modern/handlers.ts +2 -1
- package/src/modern/results.ts +10 -0
- package/src/resources/definition.ts +92 -0
- package/src/resources/registry.ts +72 -0
- package/src/resources/requests.ts +59 -0
- package/src/resources/validation.ts +82 -0
- package/src/server.ts +11 -4
- package/src/tools/context.ts +2 -2
- package/src/tools/rich-result.ts +53 -27
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @toolgrain/mcp
|
|
2
2
|
|
|
3
|
+
## 0.3.0-alpha.2
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add reusable fixed-URI resources with text and binary reads, request context, and endpoint authorization across both MCP revisions.
|
|
8
|
+
- Add native MCP Apps protocol contracts and typed React widgets with shared-entry routing.
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
- @toolgrain/protocol@0.3.0-alpha.2
|
|
14
|
+
|
|
3
15
|
## 0.3.0-alpha.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -81,6 +81,16 @@ callback. Request-cached dependencies use `createContext()` and inferred
|
|
|
81
81
|
accessors; see the
|
|
82
82
|
[context guide](https://toolgrain.mintlify.site/guides/context).
|
|
83
83
|
|
|
84
|
+
## Fixed resources
|
|
85
|
+
|
|
86
|
+
Declare reusable resources with `resource({ uri, name, read })` and register a
|
|
87
|
+
readonly array through `createServer({ name, version, tools, resources })`.
|
|
88
|
+
Readers receive `(uri, ctx)` and return `{ contents: [{ uri, text }] }` or base64
|
|
89
|
+
`blob` entries, with optional metadata. The same context supports authorization,
|
|
90
|
+
lazy providers, and cancellation. Resource lists are static; templates,
|
|
91
|
+
subscriptions, and MCP Apps remain separate work. See the
|
|
92
|
+
[resource guide](https://toolgrain.mintlify.site/guides/resources).
|
|
93
|
+
|
|
84
94
|
## Transports and compatibility
|
|
85
95
|
|
|
86
96
|
Use `stdio()` or `http()` from
|
package/dist/apps.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolContext } from "./tools/context.js";
|
|
2
|
+
/** Advisory client claim; never an authorization decision. */
|
|
3
|
+
export type AppSupport = "supported" | "not-advertised" | "unknown";
|
|
4
|
+
/**
|
|
5
|
+
* Read the current request's MCP Apps claim. Legacy independent HTTP has no
|
|
6
|
+
* retained client capabilities and returns unknown. A claim is not verified.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getAppSupport(ctx: ToolContext): AppSupport;
|
|
9
|
+
//# sourceMappingURL=apps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../src/apps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,CAY1D"}
|
package/dist/apps.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { APPS_EXTENSION_ID, APPS_MIME_TYPE } from "@toolgrain/protocol/apps";
|
|
2
|
+
/**
|
|
3
|
+
* Read the current request's MCP Apps claim. Legacy independent HTTP has no
|
|
4
|
+
* retained client capabilities and returns unknown. A claim is not verified.
|
|
5
|
+
*/
|
|
6
|
+
export function getAppSupport(ctx) {
|
|
7
|
+
const capabilities = ctx.request.client?.capabilities;
|
|
8
|
+
if (!capabilities)
|
|
9
|
+
return "unknown";
|
|
10
|
+
const extensions = capabilities.extensions;
|
|
11
|
+
if (typeof extensions !== "object" || extensions === null)
|
|
12
|
+
return "not-advertised";
|
|
13
|
+
const ui = extensions[APPS_EXTENSION_ID];
|
|
14
|
+
if (typeof ui !== "object" || ui === null)
|
|
15
|
+
return "not-advertised";
|
|
16
|
+
const mimeTypes = ui.mimeTypes;
|
|
17
|
+
return Array.isArray(mimeTypes) && mimeTypes.includes(APPS_MIME_TYPE)
|
|
18
|
+
? "supported"
|
|
19
|
+
: "not-advertised";
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=apps.js.map
|
package/dist/apps.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../src/apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM7E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAgB;IAC5C,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;IACtD,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,UAAU,GAAI,YAAyC,CAAC,UAAU,CAAC;IACzE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI;QACvD,OAAO,gBAAgB,CAAC;IAC1B,MAAM,EAAE,GAAI,UAAsC,CAAC,iBAAiB,CAAC,CAAC;IACtE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC;IACnE,MAAM,SAAS,GAAI,EAA8B,CAAC,SAAS,CAAC;IAC5D,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnE,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,gBAAgB,CAAC;AACvB,CAAC"}
|
package/dist/dispatcher.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type Implementation, type JSONRPCErrorResponse, type ProgressNotificati
|
|
|
2
2
|
import type { AuthIdentity } from "./auth/types.js";
|
|
3
3
|
import type { ContextRegistry } from "./context/registry.js";
|
|
4
4
|
import type { Request } from "./protocol/messages.js";
|
|
5
|
+
import type { ResourceRegistry } from "./resources/registry.js";
|
|
5
6
|
import type { ToolAdapter } from "./tools/adapter.js";
|
|
6
7
|
import type { ToolClient, ToolContext } from "./tools/context.js";
|
|
7
8
|
/** Per-request execution state supplied by the connection or independent caller. */
|
|
@@ -15,7 +16,7 @@ export interface RequestScope {
|
|
|
15
16
|
}
|
|
16
17
|
export type Dispatcher = (request: Request, scope: RequestScope, protocolVersion?: SupportedProtocolVersion) => Promise<ProtocolResponse | undefined>;
|
|
17
18
|
/** Compose the two protocol adapters around one execution registry. */
|
|
18
|
-
export declare function createDispatcher(tools: ToolAdapter, identity: Implementation, instructions?: string, providers?: ContextRegistry): Dispatcher;
|
|
19
|
+
export declare function createDispatcher(tools: ToolAdapter, identity: Implementation, instructions?: string, providers?: ContextRegistry, resources?: ResourceRegistry): Dispatcher;
|
|
19
20
|
/** Envelope errors have no negotiated connection when processing independent calls. */
|
|
20
21
|
export declare function formatErrorResponse(response: JSONRPCErrorResponse, protocolVersion?: SupportedProtocolVersion): ProtocolResponse;
|
|
21
22
|
//# sourceMappingURL=dispatcher.d.ts.map
|
package/dist/dispatcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAEzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElE,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,cAAc,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;CAChD;AAED,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,YAAY,EACnB,eAAe,CAAC,EAAE,wBAAwB,KACvC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;AAE3C,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAEzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElE,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,cAAc,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;CAChD;AAED,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,YAAY,EACnB,eAAe,CAAC,EAAE,wBAAwB,KACvC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;AAE3C,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,eAAe,EAC3B,SAAS,CAAC,EAAE,gBAAgB,GAC3B,UAAU,CAqBZ;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,eAAe,CAAC,EAAE,wBAAwB,GACzC,gBAAgB,CAIlB"}
|
package/dist/dispatcher.js
CHANGED
|
@@ -4,9 +4,9 @@ import { errorResponse as legacyErrorResponse } from "./legacy/responses.js";
|
|
|
4
4
|
import { createModernDispatcher } from "./modern/dispatcher.js";
|
|
5
5
|
import { validateVersionContext } from "./protocol/version-metadata.js";
|
|
6
6
|
/** Compose the two protocol adapters around one execution registry. */
|
|
7
|
-
export function createDispatcher(tools, identity, instructions, providers) {
|
|
8
|
-
const legacy = createLegacyDispatcher(tools, identity, instructions, providers);
|
|
9
|
-
const modern = createModernDispatcher(tools, identity, instructions, providers);
|
|
7
|
+
export function createDispatcher(tools, identity, instructions, providers, resources) {
|
|
8
|
+
const legacy = createLegacyDispatcher(tools, identity, instructions, providers, resources);
|
|
9
|
+
const modern = createModernDispatcher(tools, identity, instructions, providers, resources);
|
|
10
10
|
return (request, scope, protocolVersion) => {
|
|
11
11
|
validateVersionContext(request, protocolVersion);
|
|
12
12
|
return usesLegacyProtocol(request, protocolVersion)
|
package/dist/dispatcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAqBxE,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,QAAwB,EACxB,YAAqB,EACrB,SAA2B,EAC3B,SAA4B;IAE5B,MAAM,MAAM,GAAG,sBAAsB,CACnC,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,SAAS,CACV,CAAC;IACF,MAAM,MAAM,GAAG,sBAAsB,CACnC,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,SAAS,CACV,CAAC;IACF,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE;QACzC,sBAAsB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACjD,OAAO,kBAAkB,CAAC,OAAO,EAAE,eAAe,CAAC;YACjD,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;YACxB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,mBAAmB,CACjC,QAA8B,EAC9B,eAA0C;IAE1C,OAAO,eAAe,KAAK,uBAAuB;QAChD,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAC/B,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export type { AppSupport } from "./apps.js";
|
|
2
|
+
export { getAppSupport } from "./apps.js";
|
|
1
3
|
export { validateTokenAudience } from "./auth/audience.js";
|
|
2
4
|
export { createAuthAccessor } from "./auth/context.js";
|
|
3
5
|
export type { AuthErrorCode } from "./auth/errors.js";
|
|
@@ -8,6 +10,8 @@ export { authUrl as validateAuthUrl } from "./auth/url.js";
|
|
|
8
10
|
export type { ContextProvider } from "./context/definition.js";
|
|
9
11
|
export { createContext } from "./context/definition.js";
|
|
10
12
|
export type { ToolErrorDetails } from "./diagnostics.js";
|
|
13
|
+
export type { Resource, ResourceDefinition, ResourceMetadata, ResourceReadResult, } from "./resources/definition.js";
|
|
14
|
+
export { resource } from "./resources/definition.js";
|
|
11
15
|
export type { HandleOptions, Server, ServerOptions } from "./server.js";
|
|
12
16
|
export { createServer } from "./server.js";
|
|
13
17
|
export type { ToolClient, ToolContext, ToolContextOptions, ToolRequest, } from "./tools/context.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
export { getAppSupport } from "./apps.js";
|
|
1
2
|
export { validateTokenAudience } from "./auth/audience.js";
|
|
2
3
|
export { createAuthAccessor } from "./auth/context.js";
|
|
3
4
|
export { AuthError, isAuthError } from "./auth/errors.js";
|
|
4
5
|
export { validateAuthScopes } from "./auth/scopes.js";
|
|
5
6
|
export { authUrl as validateAuthUrl } from "./auth/url.js";
|
|
6
7
|
export { createContext } from "./context/definition.js";
|
|
8
|
+
export { resource } from "./resources/definition.js";
|
|
7
9
|
export { createServer } from "./server.js";
|
|
8
10
|
export { toolContext } from "./tools/context.js";
|
|
9
11
|
export { tool } from "./tools/definition.js";
|
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":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQtD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAQxD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAShD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -3,8 +3,9 @@ import type { JSONRPCResponse } from "@toolgrain/protocol/2025-06-18";
|
|
|
3
3
|
import type { ContextRegistry } from "../context/registry.js";
|
|
4
4
|
import type { RequestScope } from "../dispatcher.js";
|
|
5
5
|
import type { Request } from "../protocol/messages.js";
|
|
6
|
+
import type { ResourceRegistry } from "../resources/registry.js";
|
|
6
7
|
import type { ToolAdapter } from "../tools/adapter.js";
|
|
7
8
|
/** Initialization selects this adapter only without an explicit modern context. */
|
|
8
9
|
export declare function usesLegacyProtocol(request: Request, protocolVersion?: SupportedProtocolVersion): boolean;
|
|
9
|
-
export declare function createLegacyDispatcher(tools: ToolAdapter, identity: Implementation, instructions?: string, providers?: ContextRegistry): (request: Request, scope: RequestScope) => Promise<JSONRPCResponse | undefined>;
|
|
10
|
+
export declare function createLegacyDispatcher(tools: ToolAdapter, identity: Implementation, instructions?: string, providers?: ContextRegistry, resources?: ResourceRegistry): (request: Request, scope: RequestScope) => Promise<JSONRPCResponse | undefined>;
|
|
10
11
|
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/legacy/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/legacy/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAOjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,mFAAmF;AACnF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,wBAAwB,GACzC,OAAO,CAOT;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,eAAe,EAC3B,SAAS,CAAC,EAAE,gBAAgB,aAGjB,OAAO,SACT,YAAY,KAClB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAkExC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LEGACY_PROTOCOL_VERSION, METHOD_NOT_FOUND, } from "@toolgrain/protocol";
|
|
2
2
|
import { ProtocolError } from "../protocol/responses.js";
|
|
3
3
|
import { hasProtocolVersionMetadata } from "../protocol/version-metadata.js";
|
|
4
|
+
import { listResources, listResourceTemplates, readResource, requireResources, } from "../resources/requests.js";
|
|
4
5
|
import { createToolContext } from "../tools/context.js";
|
|
5
6
|
import { callTool, initialize, listTools, ping } from "./handlers.js";
|
|
6
7
|
import { successResponse } from "./responses.js";
|
|
@@ -11,12 +12,18 @@ export function usesLegacyProtocol(request, protocolVersion) {
|
|
|
11
12
|
!hasProtocolVersionMetadata(request) &&
|
|
12
13
|
request.method === "initialize"));
|
|
13
14
|
}
|
|
14
|
-
export function createLegacyDispatcher(tools, identity, instructions, providers) {
|
|
15
|
+
export function createLegacyDispatcher(tools, identity, instructions, providers, resources) {
|
|
15
16
|
return async (request, scope) => {
|
|
17
|
+
const context = (params) => createToolContext(scope.signal, {
|
|
18
|
+
id: request.id,
|
|
19
|
+
protocolVersion: LEGACY_PROTOCOL_VERSION,
|
|
20
|
+
...(scope.client === undefined ? {} : { client: scope.client }),
|
|
21
|
+
meta: params._meta ?? {},
|
|
22
|
+
}, scope.auth, providers, scope.reportProgress);
|
|
16
23
|
let result;
|
|
17
24
|
switch (request.method) {
|
|
18
25
|
case "initialize":
|
|
19
|
-
result = initialize(request.params, identity, instructions);
|
|
26
|
+
result = initialize(request.params, identity, instructions, resources !== undefined);
|
|
20
27
|
break;
|
|
21
28
|
case "ping":
|
|
22
29
|
result = ping(request.params);
|
|
@@ -25,12 +32,20 @@ export function createLegacyDispatcher(tools, identity, instructions, providers)
|
|
|
25
32
|
result = listTools(request.params, tools);
|
|
26
33
|
break;
|
|
27
34
|
case "tools/call":
|
|
28
|
-
result = await callTool(request.params, tools,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
result = await callTool(request.params, tools, context);
|
|
36
|
+
break;
|
|
37
|
+
case "resources/list": {
|
|
38
|
+
const listed = listResources(request.params, requireResources(resources));
|
|
39
|
+
result = {
|
|
40
|
+
resources: listed.resources.map(({ icons: _icons, ...entry }) => entry),
|
|
41
|
+
};
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case "resources/templates/list":
|
|
45
|
+
result = listResourceTemplates(request.params, requireResources(resources));
|
|
46
|
+
break;
|
|
47
|
+
case "resources/read":
|
|
48
|
+
result = await readResource(request.params, requireResources(resources), context, -32002);
|
|
34
49
|
break;
|
|
35
50
|
default:
|
|
36
51
|
throw new ProtocolError(METHOD_NOT_FOUND, "Method not found");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/legacy/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,uBAAuB,EACvB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,eAA0C;IAE1C,OAAO,CACL,eAAe,KAAK,uBAAuB;QAC3C,CAAC,eAAe,KAAK,SAAS;YAC5B,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACpC,OAAO,CAAC,MAAM,KAAK,YAAY,CAAC,CACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAkB,EAClB,QAAwB,EACxB,YAAqB,EACrB,SAA2B;
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/legacy/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { InitializeResult, ListToolsResult } from "@toolgrain/protocol/2025
|
|
|
3
3
|
import type { ToolAdapter } from "../tools/adapter.js";
|
|
4
4
|
import type { ToolContext } from "../tools/context.js";
|
|
5
5
|
/** Initialization can only negotiate the initialization-based revision. */
|
|
6
|
-
export declare function initialize(params: unknown, identity: Implementation, instructions?: string): InitializeResult;
|
|
6
|
+
export declare function initialize(params: unknown, identity: Implementation, instructions?: string, resources?: boolean): InitializeResult;
|
|
7
7
|
export declare function ping(params: unknown): Record<string, never>;
|
|
8
8
|
export declare function listTools(params: unknown, tools: ToolAdapter): ListToolsResult;
|
|
9
9
|
export declare function callTool(params: unknown, tools: ToolAdapter, ctx: (params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/legacy/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAChB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASvD,2EAA2E;AAC3E,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/legacy/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAChB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASvD,2EAA2E;AAC3E,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,UAAQ,GAChB,gBAAgB,CAYlB;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAI3D;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,GACjB,eAAe,CAcjB;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CAAE,KAAK,WAAW,gFAO9E"}
|
package/dist/legacy/handlers.js
CHANGED
|
@@ -4,12 +4,12 @@ import { callTool as executeToolCall } from "../tools/call.js";
|
|
|
4
4
|
import { callParams, commonParams, initializeParams, listParams, } from "./messages.js";
|
|
5
5
|
import { toolResult } from "./results.js";
|
|
6
6
|
/** Initialization can only negotiate the initialization-based revision. */
|
|
7
|
-
export function initialize(params, identity, instructions) {
|
|
7
|
+
export function initialize(params, identity, instructions, resources = false) {
|
|
8
8
|
if (!initializeParams.safeParse(params).success)
|
|
9
9
|
throw new ProtocolError(INVALID_PARAMS, "Invalid initialization parameters");
|
|
10
10
|
return {
|
|
11
11
|
protocolVersion: LEGACY_PROTOCOL_VERSION,
|
|
12
|
-
capabilities: { tools: {} },
|
|
12
|
+
capabilities: { tools: {}, ...(resources ? { resources: {} } : {}) },
|
|
13
13
|
serverInfo: { ...identity },
|
|
14
14
|
...(instructions === undefined ? {} : { instructions }),
|
|
15
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/legacy/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CACxB,MAAe,EACf,QAAwB,EACxB,YAAqB;
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/legacy/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CACxB,MAAe,EACf,QAAwB,EACxB,YAAqB,EACrB,SAAS,GAAG,KAAK;IAEjB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO;QAC7C,MAAM,IAAI,aAAa,CACrB,cAAc,EACd,mCAAmC,CACpC,CAAC;IACJ,OAAO;QACL,eAAe,EAAE,uBAAuB;QACxC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACpE,UAAU,EAAE,EAAE,GAAG,QAAQ,EAAE;QAC3B,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,MAAe;IAClC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO;QAC/C,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;IACrE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAe,EACf,KAAkB;IAElB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;QACvC,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC1E,OAAO;QACL,KAAK,EAAE,KAAK;aACT,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YACxD,GAAG,UAAU;YACb,GAAG,CAAC,YAAY,EAAE,IAAI,KAAK,QAAQ;gBACjC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,GAAG,YAAY,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE;gBAChE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;KACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAe,EACf,KAAkB,EAClB,GAA6E;IAE7E,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO;QACjB,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { type Implementation, type JSONRPCResultResponse } from "@toolgrain/prot
|
|
|
2
2
|
import type { ContextRegistry } from "../context/registry.js";
|
|
3
3
|
import type { RequestScope } from "../dispatcher.js";
|
|
4
4
|
import type { Request } from "../protocol/messages.js";
|
|
5
|
+
import type { ResourceRegistry } from "../resources/registry.js";
|
|
5
6
|
import type { ToolAdapter } from "../tools/adapter.js";
|
|
6
|
-
export declare function createModernDispatcher(tools: ToolAdapter, identity: Implementation, instructions?: string, providers?: ContextRegistry): (request: Request, scope: RequestScope) => Promise<JSONRPCResultResponse | undefined>;
|
|
7
|
+
export declare function createModernDispatcher(tools: ToolAdapter, identity: Implementation, instructions?: string, providers?: ContextRegistry, resources?: ResourceRegistry): (request: Request, scope: RequestScope) => Promise<JSONRPCResultResponse | undefined>;
|
|
7
8
|
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/modern/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAM3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/modern/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAM3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAOjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQvD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,eAAe,EAC3B,SAAS,CAAC,EAAE,gBAAgB,aAGjB,OAAO,SACT,YAAY,KAClB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAyE9C"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { INVALID_PARAMS, METHOD_NOT_FOUND, PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, UNSUPPORTED_PROTOCOL_VERSION, } from "@toolgrain/protocol";
|
|
2
2
|
import { ProtocolError } from "../protocol/responses.js";
|
|
3
|
+
import { listResources, listResourceTemplates, readResource, requireResources, } from "../resources/requests.js";
|
|
3
4
|
import { createToolContext, toolClient } from "../tools/context.js";
|
|
4
5
|
import { callTool, discover, listTools } from "./handlers.js";
|
|
5
6
|
import { metadata } from "./metadata.js";
|
|
6
7
|
import { successResponse } from "./responses.js";
|
|
7
|
-
|
|
8
|
+
import { resourceResult } from "./results.js";
|
|
9
|
+
export function createModernDispatcher(tools, identity, instructions, providers, resources) {
|
|
8
10
|
return async (request, scope) => {
|
|
9
11
|
const parsed = metadata.safeParse(request.params?._meta);
|
|
10
12
|
if (!parsed.success)
|
|
@@ -12,22 +14,34 @@ export function createModernDispatcher(tools, identity, instructions, providers)
|
|
|
12
14
|
const revision = parsed.data["io.modelcontextprotocol/protocolVersion"];
|
|
13
15
|
if (revision !== PROTOCOL_VERSION)
|
|
14
16
|
throw new ProtocolError(UNSUPPORTED_PROTOCOL_VERSION, "Unsupported protocol version", { supported: [...SUPPORTED_PROTOCOL_VERSIONS], requested: revision });
|
|
17
|
+
const context = (params) => createToolContext(scope.signal, {
|
|
18
|
+
id: request.id,
|
|
19
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
20
|
+
client: toolClient(parsed.data["io.modelcontextprotocol/clientInfo"], parsed.data["io.modelcontextprotocol/clientCapabilities"]),
|
|
21
|
+
meta: params._meta ?? {},
|
|
22
|
+
}, scope.auth, providers, scope.reportProgress);
|
|
15
23
|
let result;
|
|
16
24
|
switch (request.method) {
|
|
17
25
|
case "server/discover":
|
|
18
|
-
result = discover(request.params, instructions);
|
|
26
|
+
result = discover(request.params, instructions, resources !== undefined);
|
|
19
27
|
break;
|
|
20
28
|
case "tools/list":
|
|
21
29
|
result = listTools(request.params, tools);
|
|
22
30
|
break;
|
|
23
31
|
case "tools/call":
|
|
24
|
-
result = await callTool(request.params, tools,
|
|
25
|
-
id: request.id,
|
|
26
|
-
protocolVersion: PROTOCOL_VERSION,
|
|
27
|
-
client: toolClient(parsed.data["io.modelcontextprotocol/clientInfo"], parsed.data["io.modelcontextprotocol/clientCapabilities"]),
|
|
28
|
-
meta: params._meta ?? {},
|
|
29
|
-
}, scope.auth, providers, scope.reportProgress));
|
|
32
|
+
result = await callTool(request.params, tools, context);
|
|
30
33
|
break;
|
|
34
|
+
case "resources/list":
|
|
35
|
+
result = resourceResult(listResources(request.params, requireResources(resources)));
|
|
36
|
+
break;
|
|
37
|
+
case "resources/templates/list":
|
|
38
|
+
result = resourceResult(listResourceTemplates(request.params, requireResources(resources)));
|
|
39
|
+
break;
|
|
40
|
+
case "resources/read": {
|
|
41
|
+
const value = await readResource(request.params, requireResources(resources), context, INVALID_PARAMS);
|
|
42
|
+
result = value === undefined ? undefined : resourceResult(value);
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
31
45
|
default:
|
|
32
46
|
throw new ProtocolError(METHOD_NOT_FOUND, "Method not found");
|
|
33
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/modern/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EAEd,gBAAgB,EAChB,gBAAgB,EAEhB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/modern/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type DiscoverResult, type ListToolsResult } from "@toolgrain/protocol";
|
|
2
2
|
import type { ToolAdapter } from "../tools/adapter.js";
|
|
3
3
|
import type { ToolContext } from "../tools/context.js";
|
|
4
|
-
export declare function discover(params: unknown, instructions?: string): DiscoverResult;
|
|
4
|
+
export declare function discover(params: unknown, instructions?: string, resources?: boolean): DiscoverResult;
|
|
5
5
|
export declare function listTools(params: unknown, tools: ToolAdapter): ListToolsResult;
|
|
6
6
|
export declare function callTool(params: unknown, tools: ToolAdapter, ctx: (params: {
|
|
7
7
|
_meta?: Record<string, unknown> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/modern/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/modern/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,UAAQ,GAChB,cAAc,CAWhB;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,GACjB,eAAe,CAUjB;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CAAE,KAAK,WAAW,qEAO9E"}
|
package/dist/modern/handlers.js
CHANGED
|
@@ -3,7 +3,7 @@ import { ProtocolError } from "../protocol/responses.js";
|
|
|
3
3
|
import { callTool as executeToolCall } from "../tools/call.js";
|
|
4
4
|
import { callParams, commonParams, listParams } from "./messages.js";
|
|
5
5
|
import { toolResult } from "./results.js";
|
|
6
|
-
export function discover(params, instructions) {
|
|
6
|
+
export function discover(params, instructions, resources = false) {
|
|
7
7
|
if (!commonParams.safeParse(params).success)
|
|
8
8
|
throw new ProtocolError(INVALID_PARAMS, "Invalid discovery parameters");
|
|
9
9
|
return {
|
|
@@ -11,7 +11,7 @@ export function discover(params, instructions) {
|
|
|
11
11
|
ttlMs: 0,
|
|
12
12
|
cacheScope: "private",
|
|
13
13
|
supportedVersions: [...SUPPORTED_PROTOCOL_VERSIONS],
|
|
14
|
-
capabilities: { tools: {} },
|
|
14
|
+
capabilities: { tools: {}, ...(resources ? { resources: {} } : {}) },
|
|
15
15
|
...(instructions === undefined ? {} : { instructions }),
|
|
16
16
|
};
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/modern/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEd,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,QAAQ,CACtB,MAAe,EACf,YAAqB;
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/modern/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEd,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,QAAQ,CACtB,MAAe,EACf,YAAqB,EACrB,SAAS,GAAG,KAAK;IAEjB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO;QACzC,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC1E,OAAO;QACL,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,SAAS;QACrB,iBAAiB,EAAE,CAAC,GAAG,2BAA2B,CAAC;QACnD,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACpE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAe,EACf,KAAkB;IAElB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;QACvC,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC1E,OAAO;QACL,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAe,EACf,KAAkB,EAClB,GAA6E;IAE7E,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO;QACjB,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC"}
|
package/dist/modern/results.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { CallToolResult } from "@toolgrain/protocol";
|
|
2
2
|
import type { ToolExecutionResult } from "../tools/results.js";
|
|
3
3
|
export declare function toolResult(result: ToolExecutionResult): CallToolResult;
|
|
4
|
+
/** Resource results do not enable caching until applications have a cache-policy API. */
|
|
5
|
+
export declare function resourceResult<Result extends object>(result: Result): Result & {
|
|
6
|
+
resultType: "complete";
|
|
7
|
+
ttlMs: number;
|
|
8
|
+
cacheScope: "private";
|
|
9
|
+
};
|
|
4
10
|
//# sourceMappingURL=results.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../src/modern/results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAgB,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAEtE"}
|
|
1
|
+
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../src/modern/results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAgB,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAEtE;AAED,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM;gBAGpD,UAAU;;gBAEV,SAAS;EAExB"}
|
package/dist/modern/results.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export function toolResult(result) {
|
|
2
2
|
return { resultType: "complete", ...result };
|
|
3
3
|
}
|
|
4
|
+
/** Resource results do not enable caching until applications have a cache-policy API. */
|
|
5
|
+
export function resourceResult(result) {
|
|
6
|
+
return {
|
|
7
|
+
...result,
|
|
8
|
+
resultType: "complete",
|
|
9
|
+
ttlMs: 0,
|
|
10
|
+
cacheScope: "private",
|
|
11
|
+
};
|
|
12
|
+
}
|
|
4
13
|
//# sourceMappingURL=results.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/modern/results.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAAC;AAC/C,CAAC"}
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/modern/results.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAwB,MAAc;IAClE,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,UAAmB;QAC/B,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,SAAkB;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { BlobResourceContents, MetaObject, Resource as ProtocolResource, TextResourceContents } from "@toolgrain/protocol";
|
|
2
|
+
import type { ToolContext } from "../tools/context.js";
|
|
3
|
+
import type { DeepReadonly } from "../tools/json-value.js";
|
|
4
|
+
/** Readonly resource identity and display metadata, copied during server registration. */
|
|
5
|
+
export type ResourceMetadata = DeepReadonly<ProtocolResource>;
|
|
6
|
+
/** Explicit resource contents; each item supplies its own URI and exactly one payload. */
|
|
7
|
+
export interface ResourceReadResult {
|
|
8
|
+
/** Text or base64 binary entries; an existing resource may return an empty array. */
|
|
9
|
+
readonly contents: readonly ((DeepReadonly<TextResourceContents> & {
|
|
10
|
+
readonly blob?: never;
|
|
11
|
+
}) | (DeepReadonly<BlobResourceContents> & {
|
|
12
|
+
readonly text?: never;
|
|
13
|
+
}))[];
|
|
14
|
+
/** Optional result metadata, separate from each content item's metadata. */
|
|
15
|
+
readonly _meta?: DeepReadonly<MetaObject>;
|
|
16
|
+
}
|
|
17
|
+
type ReadResult = ResourceReadResult | PromiseLike<ResourceReadResult>;
|
|
18
|
+
/** A fixed resource and its application-owned reader. */
|
|
19
|
+
export interface ResourceDefinition<Result extends ReadResult = ReadResult> extends ResourceMetadata {
|
|
20
|
+
/**
|
|
21
|
+
* Read this URI using the request's auth, providers, and cancellation signal.
|
|
22
|
+
* Direct calls bypass server authorization and result validation.
|
|
23
|
+
*/
|
|
24
|
+
readonly read: (uri: string, ctx: ToolContext) => Result;
|
|
25
|
+
}
|
|
26
|
+
export declare const RESOURCE_METADATA_KEYS: readonly ["uri", "name", "title", "description", "mimeType", "annotations", "size", "icons", "_meta"];
|
|
27
|
+
/** Frozen reusable definition returned by `resource()`; direct reads remain raw. */
|
|
28
|
+
export type Resource<Result extends ReadResult = ReadResult> = ResourceDefinition<Result> & ResourceValue;
|
|
29
|
+
declare class ResourceValue {
|
|
30
|
+
constructor(definition: ResourceDefinition);
|
|
31
|
+
/** Structural brand shared by compatible package copies; object spreads drop it. */
|
|
32
|
+
"~toolgrain"(): "resource@1";
|
|
33
|
+
}
|
|
34
|
+
export declare function isResource(value: unknown): value is Resource;
|
|
35
|
+
/**
|
|
36
|
+
* Declare a reusable fixed-URI resource without reading its contents.
|
|
37
|
+
* Registration validates and snapshots metadata; server reads validate and copy results.
|
|
38
|
+
* No URI is fetched or mapped to a filesystem automatically.
|
|
39
|
+
* @param definition - Absolute URI, display metadata, and synchronous or async reader.
|
|
40
|
+
* @returns A frozen definition preserving the reader's inferred return type.
|
|
41
|
+
* @throws `TypeError` if the reader is not a function.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resource<Result extends ReadResult>(definition: ResourceDefinition<Result>): Resource<Result>;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/resources/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,QAAQ,IAAI,gBAAgB,EAC5B,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAE9D,0FAA0F;AAC1F,MAAM,WAAW,kBAAkB;IACjC,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,EAAE,SAAS,CACxB,CAAC,YAAY,CAAC,oBAAoB,CAAC,GAAG;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,GAChE,CAAC,YAAY,CAAC,oBAAoB,CAAC,GAAG;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,CACnE,EAAE,CAAC;IACJ,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;CAC3C;AAED,KAAK,UAAU,GAAG,kBAAkB,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;AAEvE,yDAAyD;AACzD,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,CACxE,SAAQ,gBAAgB;IACxB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,MAAM,CAAC;CAC1D;AAED,eAAO,MAAM,sBAAsB,YACjC,KAAK,EACL,MAAM,EACN,OAAO,EACP,aAAa,EACb,UAAU,EACV,aAAa,EACb,MAAM,EACN,OAAO,EACP,OAAO,CACC,CAAC;AAGX,oFAAoF;AACpF,MAAM,MAAM,QAAQ,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,IACzD,kBAAkB,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;AAE7C,cAAM,aAAa;IACjB,YAAY,UAAU,EAAE,kBAAkB,EAOzC;IAED,oFAAoF;IACpF,YAAY,IAAI,YAAY,CAE3B;CACF;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAM5D;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,UAAU,EAChD,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,GACrC,QAAQ,CAAC,MAAM,CAAC,CAIlB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export const RESOURCE_METADATA_KEYS = [
|
|
2
|
+
"uri",
|
|
3
|
+
"name",
|
|
4
|
+
"title",
|
|
5
|
+
"description",
|
|
6
|
+
"mimeType",
|
|
7
|
+
"annotations",
|
|
8
|
+
"size",
|
|
9
|
+
"icons",
|
|
10
|
+
"_meta",
|
|
11
|
+
];
|
|
12
|
+
const brand = Symbol.for("@toolgrain/mcp/resource@1");
|
|
13
|
+
class ResourceValue {
|
|
14
|
+
constructor(definition) {
|
|
15
|
+
for (const key of [...RESOURCE_METADATA_KEYS, "read"]) {
|
|
16
|
+
const value = definition[key];
|
|
17
|
+
if (value !== undefined)
|
|
18
|
+
Object.defineProperty(this, key, { value, enumerable: true });
|
|
19
|
+
}
|
|
20
|
+
Object.freeze(this);
|
|
21
|
+
}
|
|
22
|
+
/** Structural brand shared by compatible package copies; object spreads drop it. */
|
|
23
|
+
"~toolgrain"() {
|
|
24
|
+
return "resource@1";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(ResourceValue.prototype, brand, { value: true });
|
|
28
|
+
export function isResource(value) {
|
|
29
|
+
return (typeof value === "object" &&
|
|
30
|
+
value !== null &&
|
|
31
|
+
value[brand] === true);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Declare a reusable fixed-URI resource without reading its contents.
|
|
35
|
+
* Registration validates and snapshots metadata; server reads validate and copy results.
|
|
36
|
+
* No URI is fetched or mapped to a filesystem automatically.
|
|
37
|
+
* @param definition - Absolute URI, display metadata, and synchronous or async reader.
|
|
38
|
+
* @returns A frozen definition preserving the reader's inferred return type.
|
|
39
|
+
* @throws `TypeError` if the reader is not a function.
|
|
40
|
+
*/
|
|
41
|
+
export function resource(definition) {
|
|
42
|
+
if (typeof definition?.read !== "function")
|
|
43
|
+
throw new TypeError("Resources require a read function");
|
|
44
|
+
return new ResourceValue(definition);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/resources/definition.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,KAAK;IACL,MAAM;IACN,OAAO;IACP,aAAa;IACb,UAAU;IACV,aAAa;IACb,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC;AACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAMtD,MAAM,aAAa;IACjB,YAAY,UAA8B;QACxC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,sBAAsB,EAAE,MAAM,CAAU,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS;gBACrB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,oFAAoF;IACpF,YAAY;QACV,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AACD,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAEvE,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA+B,CAAC,KAAK,CAAC,KAAK,IAAI,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,UAAsC;IAEtC,IAAI,OAAO,UAAU,EAAE,IAAI,KAAK,UAAU;QACxC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3D,OAAO,IAAI,aAAa,CAAC,UAAU,CAAqB,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Resource as ProtocolResource } from "@toolgrain/protocol";
|
|
2
|
+
import { type ErrorHandler } from "../diagnostics.js";
|
|
3
|
+
import type { ToolContext } from "../tools/context.js";
|
|
4
|
+
import { type Resource } from "./definition.js";
|
|
5
|
+
import { type ResourceExecutionResult } from "./validation.js";
|
|
6
|
+
type Reader = (ctx: ToolContext) => Promise<ResourceExecutionResult | undefined>;
|
|
7
|
+
export interface ResourceRegistry {
|
|
8
|
+
list(): ProtocolResource[];
|
|
9
|
+
reader(uri: string): Reader | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare function createResourceRegistry(definitions: readonly Resource[], onError?: ErrorHandler): ResourceRegistry;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=registry.d.ts.map
|