@toolgrain/mcp 0.3.0-alpha.1 → 0.3.0-alpha.3

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.
Files changed (76) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +10 -0
  3. package/dist/apps.d.ts +9 -0
  4. package/dist/apps.d.ts.map +1 -0
  5. package/dist/apps.js +21 -0
  6. package/dist/apps.js.map +1 -0
  7. package/dist/dispatcher.d.ts +2 -1
  8. package/dist/dispatcher.d.ts.map +1 -1
  9. package/dist/dispatcher.js +3 -3
  10. package/dist/dispatcher.js.map +1 -1
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/legacy/dispatcher.d.ts +2 -1
  16. package/dist/legacy/dispatcher.d.ts.map +1 -1
  17. package/dist/legacy/dispatcher.js +23 -8
  18. package/dist/legacy/dispatcher.js.map +1 -1
  19. package/dist/legacy/handlers.d.ts +1 -1
  20. package/dist/legacy/handlers.d.ts.map +1 -1
  21. package/dist/legacy/handlers.js +2 -2
  22. package/dist/legacy/handlers.js.map +1 -1
  23. package/dist/modern/dispatcher.d.ts +2 -1
  24. package/dist/modern/dispatcher.d.ts.map +1 -1
  25. package/dist/modern/dispatcher.js +22 -8
  26. package/dist/modern/dispatcher.js.map +1 -1
  27. package/dist/modern/handlers.d.ts +1 -1
  28. package/dist/modern/handlers.d.ts.map +1 -1
  29. package/dist/modern/handlers.js +2 -2
  30. package/dist/modern/handlers.js.map +1 -1
  31. package/dist/modern/results.d.ts +6 -0
  32. package/dist/modern/results.d.ts.map +1 -1
  33. package/dist/modern/results.js +9 -0
  34. package/dist/modern/results.js.map +1 -1
  35. package/dist/resources/definition.d.ts +45 -0
  36. package/dist/resources/definition.d.ts.map +1 -0
  37. package/dist/resources/definition.js +46 -0
  38. package/dist/resources/definition.js.map +1 -0
  39. package/dist/resources/registry.d.ts +13 -0
  40. package/dist/resources/registry.d.ts.map +1 -0
  41. package/dist/resources/registry.js +48 -0
  42. package/dist/resources/registry.js.map +1 -0
  43. package/dist/resources/requests.d.ts +13 -0
  44. package/dist/resources/requests.d.ts.map +1 -0
  45. package/dist/resources/requests.js +43 -0
  46. package/dist/resources/requests.js.map +1 -0
  47. package/dist/resources/validation.d.ts +33 -0
  48. package/dist/resources/validation.d.ts.map +1 -0
  49. package/dist/resources/validation.js +61 -0
  50. package/dist/resources/validation.js.map +1 -0
  51. package/dist/server.d.ts +7 -4
  52. package/dist/server.d.ts.map +1 -1
  53. package/dist/server.js +6 -3
  54. package/dist/server.js.map +1 -1
  55. package/dist/tools/context.d.ts +2 -2
  56. package/dist/tools/context.d.ts.map +1 -1
  57. package/dist/tools/context.js +1 -1
  58. package/dist/tools/rich-result.d.ts +19 -19
  59. package/dist/tools/rich-result.d.ts.map +1 -1
  60. package/dist/tools/rich-result.js.map +1 -1
  61. package/package.json +2 -2
  62. package/src/apps.ts +23 -0
  63. package/src/dispatcher.ts +4 -0
  64. package/src/index.ts +9 -0
  65. package/src/legacy/dispatcher.ts +55 -13
  66. package/src/legacy/handlers.ts +2 -1
  67. package/src/modern/dispatcher.ts +57 -21
  68. package/src/modern/handlers.ts +2 -1
  69. package/src/modern/results.ts +10 -0
  70. package/src/resources/definition.ts +92 -0
  71. package/src/resources/registry.ts +72 -0
  72. package/src/resources/requests.ts +59 -0
  73. package/src/resources/validation.ts +82 -0
  74. package/src/server.ts +11 -4
  75. package/src/tools/context.ts +2 -2
  76. package/src/tools/rich-result.ts +53 -27
@@ -2,7 +2,10 @@ import type { ContentBlock, MetaObject } from "@toolgrain/protocol";
2
2
  import type { DeepReadonly, JsonCompatible } from "./json-value.js";
3
3
 
4
4
  /** Explicit MCP content and optional structured data, wrapped with `mcpResult()`. */
5
- export interface McpResultOptions<Structured = unknown> {
5
+ export interface McpResultOptions<
6
+ Structured = unknown,
7
+ Meta extends MetaObject = MetaObject,
8
+ > {
6
9
  /** Content blocks for the client; readonly authoring arrays are accepted. */
7
10
  content: readonly DeepReadonly<ContentBlock>[];
8
11
  /** JSON-compatible data; required for successful rich results with a declared output schema. */
@@ -10,7 +13,7 @@ export interface McpResultOptions<Structured = unknown> {
10
13
  /** Marks an expected, client-visible tool failure; omitted or false indicates success. */
11
14
  isError?: boolean;
12
15
  /** Optional protocol result metadata, distinct from application structured data. */
13
- _meta?: MetaObject;
16
+ _meta?: Meta;
14
17
  }
15
18
 
16
19
  // Registered symbols let duplicate package copies recognize each other's results.
@@ -20,10 +23,10 @@ const RESULT_BRAND = Symbol.for("@toolgrain/mcp/result@1");
20
23
  * Branded rich-result wrapper recognized by compatible Toolgrain package copies.
21
24
  * Use `mcpResult()` to construct one; a plain object with the same fields remains application data.
22
25
  */
23
- export class McpResult<Structured> {
26
+ export class McpResult<Structured, Meta extends MetaObject = MetaObject> {
24
27
  constructor(
25
28
  /** Explicit MCP result envelope, before server validation and revision-specific conversion. */
26
- readonly value: McpResultOptions<Structured>,
29
+ readonly value: McpResultOptions<Structured, Meta>,
27
30
  ) {
28
31
  Object.freeze(this);
29
32
  }
@@ -45,18 +48,24 @@ export function isMcpResult(value: unknown): value is McpResult<unknown> {
45
48
  }
46
49
 
47
50
  /** Explicit, client-visible tool error; structured data may be omitted for text-only errors. */
48
- export type McpErrorResult<Structured = never> = McpResult<Structured> & {
51
+ export type McpErrorResult<
52
+ Structured = never,
53
+ Meta extends MetaObject = MetaObject,
54
+ > = McpResult<Structured, Meta> & {
49
55
  /** Envelope statically marked as an error. */
50
- readonly value: McpResultOptions<Structured> & {
56
+ readonly value: McpResultOptions<Structured, Meta> & {
51
57
  /** Explicit expected-failure marker, preserved in the MCP result. */
52
58
  isError: true;
53
59
  };
54
60
  };
55
61
 
56
62
  /** A result whose structured data is present, as required by an output schema. */
57
- export type McpStructuredResult<Structured> = McpResult<Structured> & {
63
+ export type McpStructuredResult<
64
+ Structured,
65
+ Meta extends MetaObject = MetaObject,
66
+ > = McpResult<Structured, Meta> & {
58
67
  /** Envelope with required application structured data. */
59
- readonly value: McpResultOptions<Structured> & {
68
+ readonly value: McpResultOptions<Structured, Meta> & {
60
69
  /** Structured value validated against the tool's output schema when one is declared. */
61
70
  structuredContent: Structured;
62
71
  };
@@ -68,53 +77,68 @@ export type McpStructuredResult<Structured> = McpResult<Structured> & {
68
77
  * @param value - Error content and JSON-compatible data, parsed by any declared output schema.
69
78
  * @returns A branded result typed as both an error and a structured result.
70
79
  */
71
- export function mcpResult<Structured = never>(
72
- value: McpResultOptions<Structured> & {
80
+ export function mcpResult<
81
+ Structured = never,
82
+ const Meta extends MetaObject = MetaObject,
83
+ >(
84
+ value: McpResultOptions<Structured, Meta> & {
73
85
  /** Mark this result as an expected, client-visible tool failure. */
74
86
  isError: true;
75
87
  /** Structured error data, subject to output-schema validation when declared. */
76
88
  structuredContent: Structured;
77
89
  },
78
- ): McpErrorResult<Structured> & McpStructuredResult<Structured>;
90
+ ): McpErrorResult<Structured, Meta> & McpStructuredResult<Structured, Meta>;
79
91
  /**
80
92
  * Wrap a text/content-only public tool error, allowed even when the tool declares output.
81
93
  * @param value - Explicit error content without structured application data.
82
94
  * @returns A branded error result whose `isError` flag is statically true.
83
95
  */
84
- export function mcpResult(
85
- value: McpResultOptions<never> & {
96
+ export function mcpResult<
97
+ Structured = never,
98
+ const Meta extends MetaObject = MetaObject,
99
+ >(
100
+ value: McpResultOptions<never, Meta> & {
86
101
  /** Mark this result as an expected, client-visible tool failure. */
87
102
  isError: true;
88
103
  },
89
- ): McpErrorResult<never>;
104
+ ): McpErrorResult<Structured, Meta>;
90
105
  /**
91
106
  * Wrap a public tool error with an optional structured-data contract.
92
107
  * @param value - Error content and any JSON-compatible structured data.
93
108
  * @returns A branded error result; provided structured data still undergoes output validation.
94
109
  */
95
- export function mcpResult<Structured>(
96
- value: McpResultOptions<Structured> & {
110
+ export function mcpResult<
111
+ Structured,
112
+ const Meta extends MetaObject = MetaObject,
113
+ >(
114
+ value: McpResultOptions<Structured, Meta> & {
97
115
  /** Mark this result as an expected, client-visible tool failure. */
98
116
  isError: true;
99
117
  },
100
- ): McpErrorResult<Structured>;
118
+ ): McpErrorResult<Structured, Meta>;
101
119
  /**
102
120
  * Wrap rich content with required structured application data.
103
121
  * @param value - Client content and JSON-compatible data; a successful output-schema result needs both.
104
122
  * @returns A branded structured result; the server validates and converts it for the selected revision.
105
123
  */
106
- export function mcpResult<Structured>(
107
- value: McpResultOptions<Structured> & {
124
+ export function mcpResult<
125
+ Structured,
126
+ const Meta extends MetaObject = MetaObject,
127
+ >(
128
+ value: McpResultOptions<Structured, Meta> & {
108
129
  /** Required application data, parsed by the declared output schema when present. */
109
130
  structuredContent: Structured;
110
131
  },
111
- ): McpStructuredResult<Structured>;
132
+ ): McpStructuredResult<Structured, Meta>;
112
133
  /**
113
134
  * Wrap explicit client content without structured application data.
114
135
  * @param value - Rich content; successful results of this form require a tool without an output schema.
115
136
  * @returns A branded MCP result. Ordinary result-shaped objects are not treated as rich results.
116
137
  */
117
- export function mcpResult(value: McpResultOptions<never>): McpResult<never>;
138
+ export function mcpResult<
139
+ Structured = never,
140
+ const Meta extends MetaObject = MetaObject,
141
+ >(value: McpResultOptions<never, Meta>): McpResult<Structured, Meta>;
118
142
  /**
119
143
  * Explicitly return MCP content instead of ordinary application JSON.
120
144
  * The server validates the envelope, parses supplied output data, and converts it for the protocol revision.
@@ -122,11 +146,13 @@ export function mcpResult(value: McpResultOptions<never>): McpResult<never>;
122
146
  * @param value - Content blocks, optional structured data, an error marker, and protocol metadata.
123
147
  * @returns A frozen result wrapper; content is checked during server invocation.
124
148
  */
125
- export function mcpResult<Structured = never>(
126
- value: McpResultOptions<Structured>,
127
- ): McpResult<Structured>;
128
- export function mcpResult<Structured = never>(
129
- value: McpResultOptions<Structured>,
130
- ): McpResult<Structured> {
149
+ export function mcpResult<
150
+ Structured = never,
151
+ const Meta extends MetaObject = MetaObject,
152
+ >(value: McpResultOptions<Structured, Meta>): McpResult<Structured, Meta>;
153
+ export function mcpResult<
154
+ Structured = never,
155
+ const Meta extends MetaObject = MetaObject,
156
+ >(value: McpResultOptions<Structured, Meta>): McpResult<Structured, Meta> {
131
157
  return new McpResult(value);
132
158
  }