@cyanheads/mcp-ts-core 0.13.5 → 0.13.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/AGENTS.md +6 -6
- package/CLAUDE.md +6 -6
- package/README.md +55 -52
- package/biome.json +2 -2
- package/changelog/0.13.x/0.13.6.md +49 -0
- package/changelog/0.13.x/0.13.7.md +77 -0
- package/config/tsconfig.base.json +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +42 -11
- package/dist/config/index.js.map +1 -1
- package/dist/core/app.d.ts.map +1 -1
- package/dist/core/app.js +21 -4
- package/dist/core/app.js.map +1 -1
- package/dist/core/context.d.ts +9 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +4 -13
- package/dist/core/context.js.map +1 -1
- package/dist/core/worker.d.ts.map +1 -1
- package/dist/core/worker.js +7 -1
- package/dist/core/worker.js.map +1 -1
- package/dist/linter/rules/enrichment-rules.d.ts +5 -4
- package/dist/linter/rules/enrichment-rules.d.ts.map +1 -1
- package/dist/linter/rules/enrichment-rules.js +99 -22
- package/dist/linter/rules/enrichment-rules.js.map +1 -1
- package/dist/linter/rules/error-contract-rules.d.ts +46 -10
- package/dist/linter/rules/error-contract-rules.d.ts.map +1 -1
- package/dist/linter/rules/error-contract-rules.js +180 -27
- package/dist/linter/rules/error-contract-rules.js.map +1 -1
- package/dist/linter/rules/format-parity-rules.js +1 -1
- package/dist/linter/rules/format-parity-rules.js.map +1 -1
- package/dist/linter/rules/index.d.ts +1 -1
- package/dist/linter/rules/index.d.ts.map +1 -1
- package/dist/linter/rules/index.js +1 -1
- package/dist/linter/rules/index.js.map +1 -1
- package/dist/linter/rules/resource-rules.d.ts.map +1 -1
- package/dist/linter/rules/resource-rules.js +2 -1
- package/dist/linter/rules/resource-rules.js.map +1 -1
- package/dist/linter/rules/tool-rules.d.ts.map +1 -1
- package/dist/linter/rules/tool-rules.js +2 -1
- package/dist/linter/rules/tool-rules.js.map +1 -1
- package/dist/mcp-server/handlerContext.d.ts +6 -0
- package/dist/mcp-server/handlerContext.d.ts.map +1 -1
- package/dist/mcp-server/handlerContext.js +3 -0
- package/dist/mcp-server/handlerContext.js.map +1 -1
- package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -1
- package/dist/mcp-server/prompts/prompt-registration.js +6 -3
- package/dist/mcp-server/prompts/prompt-registration.js.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +5 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.js +15 -5
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
- package/dist/storage/core/IStorageProvider.d.ts +5 -2
- package/dist/storage/core/IStorageProvider.d.ts.map +1 -1
- package/dist/storage/core/providerHelpers.d.ts +29 -8
- package/dist/storage/core/providerHelpers.d.ts.map +1 -1
- package/dist/storage/core/providerHelpers.js +49 -11
- package/dist/storage/core/providerHelpers.js.map +1 -1
- package/dist/storage/providers/cloudflare/d1Provider.js +4 -4
- package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -1
- package/dist/storage/providers/cloudflare/kvProvider.d.ts +2 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -1
- package/dist/storage/providers/cloudflare/kvProvider.js +11 -9
- package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -1
- package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -1
- package/dist/storage/providers/cloudflare/r2Provider.js +8 -5
- package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -1
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -1
- package/dist/storage/providers/fileSystem/fileSystemProvider.js +10 -8
- package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +5 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.js +9 -5
- package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
- package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -1
- package/dist/storage/providers/supabase/supabaseProvider.js +5 -1
- package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -1
- package/dist/testing/index.d.ts +6 -4
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -4
- package/dist/testing/index.js.map +1 -1
- package/dist/types-global/errors.d.ts +18 -0
- package/dist/types-global/errors.d.ts.map +1 -1
- package/dist/utils/formatting/partialResult.d.ts +28 -2
- package/dist/utils/formatting/partialResult.d.ts.map +1 -1
- package/dist/utils/formatting/partialResult.js +46 -2
- package/dist/utils/formatting/partialResult.js.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.d.ts +8 -2
- package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.js +27 -16
- package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
- package/dist/utils/internal/error-handler/mappings.d.ts +1 -0
- package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/mappings.js +1 -0
- package/dist/utils/internal/error-handler/mappings.js.map +1 -1
- package/dist/utils/internal/performance.d.ts +5 -1
- package/dist/utils/internal/performance.d.ts.map +1 -1
- package/dist/utils/internal/performance.js +13 -8
- package/dist/utils/internal/performance.js.map +1 -1
- package/dist/utils/security/sanitization.d.ts +15 -15
- package/dist/utils/security/sanitization.d.ts.map +1 -1
- package/dist/utils/security/sanitization.js +108 -88
- package/dist/utils/security/sanitization.js.map +1 -1
- package/dist/utils/telemetry/instrumentation.d.ts +6 -2
- package/dist/utils/telemetry/instrumentation.d.ts.map +1 -1
- package/dist/utils/telemetry/instrumentation.js +23 -8
- package/dist/utils/telemetry/instrumentation.js.map +1 -1
- package/framework-skills/add-app-tool/SKILL.md +12 -18
- package/framework-skills/add-prompt/SKILL.md +3 -1
- package/framework-skills/add-provider/SKILL.md +14 -4
- package/framework-skills/add-resource/SKILL.md +3 -3
- package/framework-skills/add-service/SKILL.md +5 -2
- package/framework-skills/add-tool/SKILL.md +25 -8
- package/framework-skills/api-canvas/SKILL.md +2 -2
- package/framework-skills/api-config/SKILL.md +4 -3
- package/framework-skills/api-context/SKILL.md +8 -5
- package/framework-skills/api-errors/SKILL.md +25 -5
- package/framework-skills/api-linter/SKILL.md +95 -22
- package/framework-skills/api-telemetry/SKILL.md +9 -4
- package/framework-skills/api-testing/SKILL.md +21 -13
- package/framework-skills/api-utils/SKILL.md +3 -3
- package/framework-skills/api-utils/references/security.md +7 -6
- package/framework-skills/code-simplifier/SKILL.md +31 -18
- package/framework-skills/design-mcp-server/SKILL.md +62 -35
- package/framework-skills/git-wrapup/SKILL.md +16 -10
- package/framework-skills/maintenance/SKILL.md +2 -2
- package/framework-skills/orchestrations/SKILL.md +1 -1
- package/framework-skills/orchestrations/workflows/greenfield-build.md +15 -8
- package/framework-skills/polish-docs-meta/SKILL.md +2 -2
- package/framework-skills/polish-docs-meta/references/package-meta.md +1 -1
- package/framework-skills/polish-docs-meta/references/readme.md +3 -3
- package/framework-skills/release-and-publish/SKILL.md +6 -4
- package/framework-skills/release-pr-review/SKILL.md +18 -1
- package/framework-skills/report-issue-framework/SKILL.md +2 -2
- package/framework-skills/report-issue-local/SKILL.md +3 -3
- package/framework-skills/security-pass/SKILL.md +11 -3
- package/framework-skills/tool-defs-analysis/SKILL.md +3 -3
- package/package.json +16 -37
- package/scripts/lint-mcp.ts +43 -4
- package/templates/.env.example +3 -1
- package/templates/.github/ISSUE_TEMPLATE/feature_request.yml +1 -1
- package/templates/AGENTS.md +3 -3
- package/templates/CLAUDE.md +3 -3
- package/templates/Dockerfile +4 -4
- package/templates/devcheck.config.json +1 -0
- package/templates/package.json +4 -4
- package/templates/src/mcp-server/prompts/definitions/echo.prompt.ts +2 -4
- package/templates/src/mcp-server/resources/definitions/echo-app-ui.app-resource.ts +51 -14
- package/templates/src/mcp-server/resources/definitions/echo.resource.ts +1 -1
- package/templates/src/mcp-server/tools/definitions/echo-app.app-tool.ts +2 -3
- package/templates/src/mcp-server/tools/definitions/echo.tool.ts +8 -2
- package/dist/utils/telemetry/index.d.ts +0 -12
- package/dist/utils/telemetry/index.d.ts.map +0 -1
- package/dist/utils/telemetry/index.js +0 -12
- package/dist/utils/telemetry/index.js.map +0 -1
|
@@ -18,31 +18,69 @@ const APP_HTML = `<!DOCTYPE html>
|
|
|
18
18
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
19
19
|
<title>Echo App</title>
|
|
20
20
|
<style>
|
|
21
|
+
/*
|
|
22
|
+
* Local tokens are the pre-connect baseline: light by default, dark when the
|
|
23
|
+
* OS prefers it, and pinned by the data-theme attribute applyDocumentTheme sets.
|
|
24
|
+
* Every rule reads the host's variable first (installed by applyHostStyleVariables)
|
|
25
|
+
* and falls back to the local token until host context arrives.
|
|
26
|
+
*/
|
|
27
|
+
:root {
|
|
28
|
+
color-scheme: light dark;
|
|
29
|
+
--bg: #ffffff; --surface: #f8fafc; --fg: #0f172a; --muted: #64748b;
|
|
30
|
+
--border: #e2e8f0; --accent: #2563eb; --accent-fg: #ffffff;
|
|
31
|
+
}
|
|
32
|
+
@media (prefers-color-scheme: dark) {
|
|
33
|
+
:root:not([data-theme="light"]) {
|
|
34
|
+
--bg: #0f172a; --surface: #1e293b; --fg: #e2e8f0; --muted: #94a3b8;
|
|
35
|
+
--border: #334155; --accent: #3b82f6; --accent-fg: #ffffff;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
:root[data-theme="dark"] {
|
|
39
|
+
--bg: #0f172a; --surface: #1e293b; --fg: #e2e8f0; --muted: #94a3b8;
|
|
40
|
+
--border: #334155; --accent: #3b82f6; --accent-fg: #ffffff;
|
|
41
|
+
}
|
|
21
42
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
22
43
|
body {
|
|
23
|
-
font-family: system-ui, -apple-system, sans-serif;
|
|
24
|
-
background:
|
|
44
|
+
font-family: var(--font-sans, system-ui, -apple-system, sans-serif);
|
|
45
|
+
background: var(--color-background-primary, var(--bg));
|
|
46
|
+
color: var(--color-text-primary, var(--fg));
|
|
25
47
|
padding: 1.5rem; min-height: 100vh;
|
|
26
48
|
display: flex; flex-direction: column; align-items: center; gap: 1rem;
|
|
27
49
|
}
|
|
28
|
-
h1 {
|
|
50
|
+
h1 {
|
|
51
|
+
font-size: var(--font-heading-sm-size, 1.25rem);
|
|
52
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
53
|
+
}
|
|
29
54
|
.card {
|
|
30
|
-
background:
|
|
55
|
+
background: var(--color-background-secondary, var(--surface));
|
|
56
|
+
border: 1px solid var(--color-border-primary, var(--border));
|
|
57
|
+
border-radius: var(--border-radius-lg, 0.5rem);
|
|
31
58
|
padding: 1rem 1.25rem; width: 100%; max-width: 480px;
|
|
32
59
|
}
|
|
33
|
-
.label {
|
|
34
|
-
|
|
60
|
+
.label {
|
|
61
|
+
font-size: var(--font-text-xs-size, 0.75rem);
|
|
62
|
+
color: var(--color-text-secondary, var(--muted));
|
|
63
|
+
text-transform: uppercase; letter-spacing: 0.05em;
|
|
64
|
+
}
|
|
65
|
+
.value { font-size: var(--font-text-md-size, 1rem); margin-top: 0.25rem; word-break: break-word; }
|
|
35
66
|
.controls { display: flex; gap: 0.5rem; width: 100%; max-width: 480px; }
|
|
36
67
|
input[type="text"] {
|
|
37
|
-
flex: 1; padding: 0.5rem 0.75rem;
|
|
38
|
-
|
|
68
|
+
flex: 1; padding: 0.5rem 0.75rem;
|
|
69
|
+
background: var(--color-background-secondary, var(--surface));
|
|
70
|
+
border: 1px solid var(--color-border-primary, var(--border));
|
|
71
|
+
border-radius: var(--border-radius-md, 0.375rem);
|
|
72
|
+
color: var(--color-text-primary, var(--fg));
|
|
73
|
+
font: inherit; font-size: var(--font-text-sm-size, 0.875rem); outline: none;
|
|
39
74
|
}
|
|
40
|
-
input[type="text"]:focus { border-color:
|
|
75
|
+
input[type="text"]:focus { border-color: var(--color-ring-primary, var(--accent)); }
|
|
41
76
|
button {
|
|
42
|
-
padding: 0.5rem 1rem;
|
|
43
|
-
|
|
77
|
+
padding: 0.5rem 1rem; border: none;
|
|
78
|
+
background: var(--color-background-inverse, var(--accent));
|
|
79
|
+
color: var(--color-text-inverse, var(--accent-fg));
|
|
80
|
+
border-radius: var(--border-radius-md, 0.375rem);
|
|
81
|
+
font: inherit; font-size: var(--font-text-sm-size, 0.875rem); cursor: pointer;
|
|
44
82
|
}
|
|
45
|
-
button:hover {
|
|
83
|
+
button:hover { opacity: 0.9; }
|
|
46
84
|
button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
47
85
|
</style>
|
|
48
86
|
</head>
|
|
@@ -138,8 +176,7 @@ export const echoAppUiResource = appResource('ui://template-echo-app/app.html',
|
|
|
138
176
|
name: 'echo-app-ui',
|
|
139
177
|
title: 'Echo App UI',
|
|
140
178
|
description:
|
|
141
|
-
'Interactive HTML app for the echo app tool. Displayed as a sandboxed iframe '
|
|
142
|
-
'by MCP Apps-capable hosts.',
|
|
179
|
+
'Interactive HTML app for the echo app tool. Displayed as a sandboxed iframe by MCP Apps-capable hosts.',
|
|
143
180
|
params: ParamsSchema,
|
|
144
181
|
auth: ['resource:echo-app-ui:read'],
|
|
145
182
|
_meta: {
|
|
@@ -9,7 +9,7 @@ import { resource, z } from '@cyanheads/mcp-ts-core';
|
|
|
9
9
|
// Like tools, prefix names with your server name: template-echo, tasks-status, etc.
|
|
10
10
|
export const echoResource = resource('echo://{message}', {
|
|
11
11
|
name: 'template-echo-resource',
|
|
12
|
-
description: '
|
|
12
|
+
description: 'Echo a message from the URI. Replace this with your first real resource.',
|
|
13
13
|
mimeType: 'application/json',
|
|
14
14
|
params: z.object({
|
|
15
15
|
message: z.string().describe('The message to echo back.'),
|
|
@@ -15,15 +15,14 @@ export const echoAppTool = appTool('template_echo_app', {
|
|
|
15
15
|
resourceUri: UI_RESOURCE_URI,
|
|
16
16
|
title: 'Echo App',
|
|
17
17
|
description:
|
|
18
|
-
'
|
|
19
|
-
'the extension render an HTML interface; others receive a text fallback.',
|
|
18
|
+
'Echo a message back with an interactive UI. Hosts that support MCP Apps render an HTML interface; other hosts receive a text fallback.',
|
|
20
19
|
annotations: { readOnlyHint: true },
|
|
21
20
|
input: z.object({
|
|
22
21
|
message: z.string().describe('The message to echo.'),
|
|
23
22
|
}),
|
|
24
23
|
output: z.object({
|
|
25
24
|
message: z.string().describe('The echoed message.'),
|
|
26
|
-
timestamp: z.
|
|
25
|
+
timestamp: z.iso.datetime().describe('ISO 8601 timestamp of the echo.'),
|
|
27
26
|
}),
|
|
28
27
|
|
|
29
28
|
handler(input, ctx) {
|
|
@@ -9,7 +9,7 @@ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
|
9
9
|
// Tool names are snake_case, prefixed with your server name to avoid collisions across servers.
|
|
10
10
|
// e.g. for a "tasks" server: tasks_fetch_list, tasks_create_item.
|
|
11
11
|
export const echoTool = tool('template_echo_message', {
|
|
12
|
-
description: '
|
|
12
|
+
description: 'Echo a message back. Replace this with your first real tool.',
|
|
13
13
|
annotations: { readOnlyHint: true },
|
|
14
14
|
input: z.object({
|
|
15
15
|
message: z.string().describe('The message to echo back.'),
|
|
@@ -42,7 +42,13 @@ export const echoTool = tool('template_echo_message', {
|
|
|
42
42
|
|
|
43
43
|
handler(input, ctx) {
|
|
44
44
|
if (input.message.trim().length === 0) {
|
|
45
|
-
|
|
45
|
+
// Spreading ctx.recoveryFor puts the declared recovery on the wire. Without
|
|
46
|
+
// it the hint reaches neither structuredContent nor content[].
|
|
47
|
+
throw ctx.fail(
|
|
48
|
+
'empty_message',
|
|
49
|
+
'Message must contain at least one non-whitespace character.',
|
|
50
|
+
{ ...ctx.recoveryFor('empty_message') },
|
|
51
|
+
);
|
|
46
52
|
}
|
|
47
53
|
// Reaches both client surfaces with no format() plumbing.
|
|
48
54
|
ctx.enrich({ characterCount: input.message.length });
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Barrel for telemetry utilities.
|
|
3
|
-
* Provides OpenTelemetry instrumentation, MCP attribute keys, trace helpers,
|
|
4
|
-
* and metrics creation utilities for observability.
|
|
5
|
-
*
|
|
6
|
-
* @module src/utils/telemetry
|
|
7
|
-
*/
|
|
8
|
-
export * from './attributes.js';
|
|
9
|
-
export * from './instrumentation.js';
|
|
10
|
-
export * from './metrics.js';
|
|
11
|
-
export * from './trace.js';
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Barrel for telemetry utilities.
|
|
3
|
-
* Provides OpenTelemetry instrumentation, MCP attribute keys, trace helpers,
|
|
4
|
-
* and metrics creation utilities for observability.
|
|
5
|
-
*
|
|
6
|
-
* @module src/utils/telemetry
|
|
7
|
-
*/
|
|
8
|
-
export * from './attributes.js';
|
|
9
|
-
export * from './instrumentation.js';
|
|
10
|
-
export * from './metrics.js';
|
|
11
|
-
export * from './trace.js';
|
|
12
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|