@nifrajs/mcp 2.5.0 → 2.6.0
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/tool.d.ts +4 -1
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js +1 -0
- package/dist/tool.js.map +1 -1
- package/package.json +1 -1
- package/src/tool.ts +11 -1
package/dist/tool.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `widget` is passed, the tool advertises it via `_meta.ui.resourceUri` on both `tools/list` and each
|
|
7
7
|
* `tools/call` result, so the host knows to render the widget - see {@link ../protocol.ts}.
|
|
8
8
|
*/
|
|
9
|
-
import type { McpContentBlock, McpTool, McpToolContext } from "./protocol.js";
|
|
9
|
+
import type { McpContentBlock, McpTool, McpToolAnnotations, McpToolContext } from "./protocol.js";
|
|
10
10
|
import type { InferOutput, StandardSchemaV1 } from "./standard.js";
|
|
11
11
|
import type { McpWidget } from "./widget.js";
|
|
12
12
|
/** The ergonomic result an MCP-tool handler may return (coerced to the protocol's {@link McpToolResult}). */
|
|
@@ -45,6 +45,9 @@ export interface DefineMcpToolOptions<S extends StandardSchemaV1 = UntypedArgs>
|
|
|
45
45
|
* whose schemas carry no JSON Schema, so the agent still sees real parameter docs.
|
|
46
46
|
*/
|
|
47
47
|
readonly inputSchema?: Record<string, unknown>;
|
|
48
|
+
/** MCP tool safety hints (`readOnlyHint`/`destructiveHint`/…) surfaced in `tools/list`. Hosts use
|
|
49
|
+
* them to decide confirmation UX, and connector directory reviews expect every tool to carry them. */
|
|
50
|
+
readonly annotations?: McpToolAnnotations;
|
|
48
51
|
/** Link a widget so the tool's result renders as interactive UI in MCP Apps hosts (iframe). */
|
|
49
52
|
readonly widget?: McpWidget;
|
|
50
53
|
/** Render-intent for generative hosts that build their own themed UI from `structuredContent`. Lands
|
package/dist/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,kBAAkB,EAClB,cAAc,EAEf,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,6GAA6G;AAC7G,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN;IACE,yFAAyF;IACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,kDAAkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,gFAAgF;IAChF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAEL;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,MAAM,GACN,OAAO,GACP,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEjB,6FAA6F;AAC7F,KAAK,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAErE,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,gBAAgB,GAAG,WAAW;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAClB;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9C;0GACsG;IACtG,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IACzC,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B;;0CAEsC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAChB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,cAAc,KACpB,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;CAC1D;AAgCD,wBAAgB,aAAa,CAAC,CAAC,SAAS,gBAAgB,GAAG,WAAW,EACpE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC5B,OAAO,CA4BT"}
|
package/dist/tool.js
CHANGED
|
@@ -46,6 +46,7 @@ export function defineMcpTool(opts) {
|
|
|
46
46
|
inputSchema: opts.inputSchema ??
|
|
47
47
|
(input !== undefined ? jsonSchemaOf(input) : undefined) ??
|
|
48
48
|
EMPTY_OBJECT_SCHEMA,
|
|
49
|
+
...(opts.annotations !== undefined ? { annotations: opts.annotations } : {}),
|
|
49
50
|
...(meta !== undefined ? { _meta: meta } : {}),
|
|
50
51
|
handler: async (args, context) => {
|
|
51
52
|
let validated = args;
|
package/dist/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAmE1D,qGAAqG;AACrG,SAAS,QAAQ,CAAC,MAAkB,EAAE,MAAe;IACnD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAClE,MAAM,EAAE,GAA4B,EAAE,CAAA;IACtC,IAAI,MAAM,KAAK,SAAS;QAAE,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;IACrD,IAAI,MAAM,KAAK,SAAS;QAAE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAA;IAC5C,OAAO,EAAE,EAAE,EAAE,CAAA;AACf,CAAC;AAED,MAAM,mBAAmB,GAA4B;IACnD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,EAAE;IACd,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,SAAS,MAAM,CAAC,MAA4B;IAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC7C,MAAM,OAAO,GACX,MAAM,CAAC,OAAO;QACd,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACjF,OAAO;QACL,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,iBAAiB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAA6B;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACxB,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EACT,IAAI,CAAC,WAAW;YAChB,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvD,mBAAmB;QACrB,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/B,IAAI,SAAS,GAAG,IAAsB,CAAA;YACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACtD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAChC,4FAA4F;oBAC5F,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBACtF,OAAO,EAAE,IAAI;qBACd,CAAA;gBACH,CAAC;gBACD,SAAS,GAAG,MAAM,CAAC,KAAuB,CAAA;YAC5C,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;QACvD,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Build MCP servers - and MCP Apps (interactive `ui://` widgets, SEP-1865) - for a nifra app. The transport-agnostic JSON-RPC core (also used by `@nifrajs/cli`'s dev MCP), a Streamable-HTTP handler you mount at `POST /mcp`, and `defineMcpWidget`/`defineMcpTool` for tool results that render real UI in MCP hosts.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
package/src/tool.ts
CHANGED
|
@@ -7,7 +7,13 @@
|
|
|
7
7
|
* `tools/call` result, so the host knows to render the widget - see {@link ../protocol.ts}.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type {
|
|
10
|
+
import type {
|
|
11
|
+
McpContentBlock,
|
|
12
|
+
McpTool,
|
|
13
|
+
McpToolAnnotations,
|
|
14
|
+
McpToolContext,
|
|
15
|
+
McpToolResult,
|
|
16
|
+
} from "./protocol.ts"
|
|
11
17
|
import type { InferOutput, StandardSchemaV1 } from "./standard.ts"
|
|
12
18
|
import { formatIssues, jsonSchemaOf } from "./standard.ts"
|
|
13
19
|
import type { McpWidget } from "./widget.ts"
|
|
@@ -61,6 +67,9 @@ export interface DefineMcpToolOptions<S extends StandardSchemaV1 = UntypedArgs>
|
|
|
61
67
|
* whose schemas carry no JSON Schema, so the agent still sees real parameter docs.
|
|
62
68
|
*/
|
|
63
69
|
readonly inputSchema?: Record<string, unknown>
|
|
70
|
+
/** MCP tool safety hints (`readOnlyHint`/`destructiveHint`/…) surfaced in `tools/list`. Hosts use
|
|
71
|
+
* them to decide confirmation UX, and connector directory reviews expect every tool to carry them. */
|
|
72
|
+
readonly annotations?: McpToolAnnotations
|
|
64
73
|
/** Link a widget so the tool's result renders as interactive UI in MCP Apps hosts (iframe). */
|
|
65
74
|
readonly widget?: McpWidget
|
|
66
75
|
/** Render-intent for generative hosts that build their own themed UI from `structuredContent`. Lands
|
|
@@ -115,6 +124,7 @@ export function defineMcpTool<S extends StandardSchemaV1 = UntypedArgs>(
|
|
|
115
124
|
opts.inputSchema ??
|
|
116
125
|
(input !== undefined ? jsonSchemaOf(input) : undefined) ??
|
|
117
126
|
EMPTY_OBJECT_SCHEMA,
|
|
127
|
+
...(opts.annotations !== undefined ? { annotations: opts.annotations } : {}),
|
|
118
128
|
...(meta !== undefined ? { _meta: meta } : {}),
|
|
119
129
|
handler: async (args, context) => {
|
|
120
130
|
let validated = args as InferOutput<S>
|