mirror of
https://github.com/sveltejs/ai-tools.git
synced 2026-07-03 19:19:25 +08:00
Compare commits
9 Commits
@sveltejs/
...
prompt-imp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa0d173db0 | ||
|
|
48d43a0e76 | ||
|
|
1124aefa4b | ||
|
|
a6fc42ec56 | ||
|
|
34ab5c075d | ||
|
|
d2242a1d2c | ||
|
|
b3561dcb2d | ||
|
|
3f70809ce6 | ||
|
|
2d7da648e3 |
5
.changeset/perfect-fishes-scream.md
Normal file
5
.changeset/perfect-fishes-scream.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@sveltejs/mcp-server": patch
|
||||
---
|
||||
|
||||
fix: improve prompt to reduce token usage
|
||||
@@ -23,6 +23,7 @@
|
||||
"@mcp-ui/server": "catalog:ai",
|
||||
"@sveltejs/mcp-schema": "workspace:^",
|
||||
"@tmcp/adapter-valibot": "catalog:tmcp",
|
||||
"@tmcp/transport-in-memory": "catalog:tmcp",
|
||||
"@typescript-eslint/parser": "catalog:lint",
|
||||
"eslint": "catalog:lint",
|
||||
"eslint-plugin-svelte": "catalog:lint",
|
||||
|
||||
@@ -2,19 +2,22 @@ import type { SvelteMcp } from '../../index.js';
|
||||
import * as v from 'valibot';
|
||||
import { format_sections_list } from '../../utils.js';
|
||||
import { icons } from '../../icons/index.js';
|
||||
import { prompt } from 'tmcp/utils';
|
||||
|
||||
/**
|
||||
* Function that actually generates the prompt string. You can use this in the MCP server handler to generate the prompt, it can accept arguments
|
||||
* if needed (it will always be invoked manually so it's up to you to provide the arguments).
|
||||
*/
|
||||
function svelte_task(available_docs: string, task: string) {
|
||||
return `You are a Svelte expert tasked to build components and utilities for Svelte developers. If you need documentation for anything related to Svelte you can invoke the tool \`get_documentation\` with one of the following paths:
|
||||
return `You are a Svelte expert tasked to build components and utilities for Svelte developers. If you need documentation for anything related to Svelte you can invoke the tool \`get_documentation\` with one of the following paths. However: before invoking the \`get_documentation\` tool, try to answer the users query using your own knowledge and the \`svelte-autofixer\` tool. Be mindful of how many section you request, since it is token-intensive!
|
||||
<available-docs>
|
||||
|
||||
${available_docs}
|
||||
|
||||
</available-docs>
|
||||
|
||||
These are the available documentation sections that \`list-sections\` will return, you do not need to call it again.
|
||||
|
||||
Every time you write a Svelte component or a Svelte module you MUST invoke the \`svelte-autofixer\` tool providing the code. The tool will return a list of issues or suggestions. If there are any issues or suggestions you MUST fix them and call the tool again with the updated code. You MUST keep doing this until the tool returns no issues or suggestions. Only then you can return the code to the user.
|
||||
|
||||
This is the task you will work on:
|
||||
@@ -73,17 +76,7 @@ export function setup_svelte_task(server: SvelteMcp) {
|
||||
}
|
||||
const available_docs = await format_sections_list();
|
||||
|
||||
return {
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: {
|
||||
type: 'text',
|
||||
text: svelte_task(available_docs, task),
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
return prompt.text(svelte_task(available_docs, task));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { SvelteMcp } from '../../index.js';
|
||||
import { get_sections, fetch_with_timeout } from '../../utils.js';
|
||||
import { icons } from '../../icons/index.js';
|
||||
import { resource } from 'tmcp/utils';
|
||||
|
||||
export async function list_sections(server: SvelteMcp) {
|
||||
const sections = await get_sections();
|
||||
@@ -59,15 +60,7 @@ export async function list_sections(server: SvelteMcp) {
|
||||
if (!section) throw new Error(`Section not found: ${slug}`);
|
||||
const response = await fetch_with_timeout(section.url);
|
||||
const content = await response.text();
|
||||
return {
|
||||
contents: [
|
||||
{
|
||||
uri,
|
||||
type: 'text',
|
||||
text: content,
|
||||
},
|
||||
],
|
||||
};
|
||||
return resource.text(uri, content);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -3,13 +3,14 @@ import * as v from 'valibot';
|
||||
import { get_sections, fetch_with_timeout, format_sections_list } from '../../utils.js';
|
||||
import { SECTIONS_LIST_INTRO, SECTIONS_LIST_OUTRO } from './prompts.js';
|
||||
import { icons } from '../../icons/index.js';
|
||||
import { tool } from 'tmcp/utils';
|
||||
|
||||
export function get_documentation(server: SvelteMcp) {
|
||||
server.tool(
|
||||
{
|
||||
name: 'get-documentation',
|
||||
description:
|
||||
'Retrieves full documentation content for Svelte 5 or SvelteKit sections. Supports flexible search by title (e.g., "$state", "routing") or file path (e.g., "cli/overview"). Can accept a single section name or an array of sections. Before running this, make sure to analyze the users query, as well as the output from list-sections (which should be called first). Then ask for ALL relevant sections the user might require. For example, if the user asks to build anything interactive, you will need to fetch all relevant runes, and so on.',
|
||||
'Retrieves full documentation content for Svelte 5 or SvelteKit sections. Supports flexible search by title (e.g., "$state", "routing") or file path (e.g., "cli/overview"). Can accept a single section name or an array of sections. Before running this, make sure to analyze the users query, as well as the output from list-sections (which should be called first). Then ask for ALL relevant sections the user might require. For example, if the user asks to build anything interactive, you will need to fetch all relevant runes, and so on. Before calling this tool, try to implement Svelte components using your own knowledge and the `svelte-autofixer` tool, since calling this tool is token intensive.',
|
||||
schema: v.object({
|
||||
section: v.pipe(
|
||||
v.union([v.string(), v.array(v.string())]),
|
||||
@@ -107,14 +108,7 @@ export function get_documentation(server: SvelteMcp) {
|
||||
final_text += `\n\n---\n\n${SECTIONS_LIST_INTRO}\n\n${formatted_sections}\n\n${SECTIONS_LIST_OUTRO}`;
|
||||
}
|
||||
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: final_text,
|
||||
},
|
||||
],
|
||||
};
|
||||
return tool.text(final_text);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import type { SvelteMcp } from '../../index.js';
|
||||
import { format_sections_list } from '../../utils.js';
|
||||
import { SECTIONS_LIST_INTRO, SECTIONS_LIST_OUTRO } from './prompts.js';
|
||||
import { icons } from '../../icons/index.js';
|
||||
import { tool } from 'tmcp/utils';
|
||||
|
||||
export function list_sections(server: SvelteMcp) {
|
||||
server.tool(
|
||||
@@ -17,14 +18,7 @@ export function list_sections(server: SvelteMcp) {
|
||||
}
|
||||
const formatted_sections = await format_sections_list();
|
||||
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `${SECTIONS_LIST_INTRO}\n\n${formatted_sections}\n\n${SECTIONS_LIST_OUTRO}`,
|
||||
},
|
||||
],
|
||||
};
|
||||
return tool.text(`${SECTIONS_LIST_INTRO}\n\n${formatted_sections}\n\n${SECTIONS_LIST_OUTRO}`);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
import { InMemoryTransport } from '@tmcp/transport-in-memory';
|
||||
import { beforeEach, describe, expect, it } from 'vitest';
|
||||
import { server } from '../../index.js';
|
||||
|
||||
const transport = new InMemoryTransport(server);
|
||||
|
||||
let session: ReturnType<typeof transport.session>;
|
||||
|
||||
describe('playground-link tool', () => {
|
||||
beforeEach(async () => {
|
||||
session = transport.session();
|
||||
await session.initialize(
|
||||
'2025-06-18',
|
||||
{},
|
||||
{
|
||||
name: 'test-client',
|
||||
version: '1.0.0',
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
it('should create a playground link if App.svelte is present', async () => {
|
||||
const result = await session.callTool<{ url: string }>('playground-link', {
|
||||
name: 'My Playground',
|
||||
tailwind: false,
|
||||
files: {
|
||||
'App.svelte': `Hi there!`,
|
||||
},
|
||||
});
|
||||
expect(result.structuredContent).toBeDefined();
|
||||
expect(result.structuredContent?.url).toBeDefined();
|
||||
// Verify URL structure rather than exact match (gzip compression can vary by platform)
|
||||
expect(result.structuredContent?.url).toMatch(/^https:\/\/svelte\.dev\/playground#H4sIA/);
|
||||
expect(result.structuredContent?.url).toContain('svelte.dev/playground');
|
||||
});
|
||||
|
||||
it('should have a content with the stringified version of structured content and an ui resource', async () => {
|
||||
const result = await session.callTool<{ url: string }>('playground-link', {
|
||||
name: 'My Playground',
|
||||
tailwind: false,
|
||||
files: {
|
||||
'App.svelte': `Hi there!`,
|
||||
},
|
||||
});
|
||||
expect(result.structuredContent).toBeDefined();
|
||||
expect(result.content).toStrictEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
type: 'text',
|
||||
text: JSON.stringify(result.structuredContent),
|
||||
}),
|
||||
]),
|
||||
);
|
||||
// Verify resource structure without exact URL match (gzip compression can vary by platform)
|
||||
expect(result.content).toStrictEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
type: 'resource',
|
||||
resource: expect.objectContaining({
|
||||
uri: 'ui://svelte/playground-link',
|
||||
mimeType: 'text/uri-list',
|
||||
_meta: { 'mcpui.dev/ui-preferred-frame-size': ['100%', '1200px'] },
|
||||
text: expect.stringMatching(/^https:\/\/svelte\.dev\/playground\/embed#H4sIA/),
|
||||
}),
|
||||
}),
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
it('should not create a playground link if App.svelte is missing', async () => {
|
||||
const result = await session.callTool<{ url: string }>('playground-link', {
|
||||
name: 'My Playground',
|
||||
tailwind: false,
|
||||
files: {
|
||||
'Something.svelte': `Hi there!`,
|
||||
},
|
||||
});
|
||||
expect(result.isError).toBe(true);
|
||||
expect(result.content?.[0]).toStrictEqual({
|
||||
type: 'text',
|
||||
text: 'The files must contain an App.svelte file as the entry point',
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -2,6 +2,7 @@ import type { SvelteMcp } from '../../index.js';
|
||||
import * as v from 'valibot';
|
||||
import { icons } from '../../icons/index.js';
|
||||
import { createUIResource } from '@mcp-ui/server';
|
||||
import { tool } from 'tmcp/utils';
|
||||
|
||||
async function compress_and_encode_text(input: string) {
|
||||
const reader = new Blob([input]).stream().pipeThrough(new CompressionStream('gzip')).getReader();
|
||||
@@ -82,17 +83,8 @@ export function playground_link(server: SvelteMcp) {
|
||||
if (server.ctx.sessionId && server.ctx.custom?.track) {
|
||||
await server.ctx.custom?.track?.(server.ctx.sessionId, 'playground-link-no-app-svelte');
|
||||
}
|
||||
return {
|
||||
isError: true,
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: JSON.stringify({
|
||||
error: 'The files must contain an App.svelte file as the entry point',
|
||||
}),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
return tool.error('The files must contain an App.svelte file as the entry point');
|
||||
}
|
||||
|
||||
const playground_config = {
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { InMemoryTransport } from '@tmcp/transport-in-memory';
|
||||
import { beforeEach, describe, expect, it } from 'vitest';
|
||||
import { server } from '../../index.js';
|
||||
|
||||
/**
|
||||
* Small utility to create a JSON-RPC request without having to always specify as const
|
||||
*/
|
||||
function request<const T>(request: T) {
|
||||
return request;
|
||||
}
|
||||
const transport = new InMemoryTransport(server);
|
||||
|
||||
let session: ReturnType<typeof transport.session>;
|
||||
|
||||
async function autofixer_tool_call(
|
||||
code: string,
|
||||
@@ -14,51 +13,34 @@ async function autofixer_tool_call(
|
||||
desired_svelte_version = 5,
|
||||
async = false,
|
||||
) {
|
||||
const result = await server.receive({
|
||||
jsonrpc: '2.0',
|
||||
id: 2,
|
||||
method: 'tools/call',
|
||||
params: {
|
||||
name: 'svelte-autofixer',
|
||||
arguments: {
|
||||
code,
|
||||
desired_svelte_version,
|
||||
filename: 'App.svelte',
|
||||
async,
|
||||
},
|
||||
},
|
||||
const result = await session.callTool('svelte-autofixer', {
|
||||
code,
|
||||
desired_svelte_version,
|
||||
filename: 'App.svelte',
|
||||
async,
|
||||
});
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result.result).toBeDefined();
|
||||
if (is_error) {
|
||||
return result.result;
|
||||
return result as any;
|
||||
}
|
||||
expect(result.result.structuredContent).toBeDefined();
|
||||
return result.result.structuredContent;
|
||||
expect(result.structuredContent).toBeDefined();
|
||||
return result.structuredContent as any;
|
||||
}
|
||||
|
||||
describe('svelte-autofixer tool', () => {
|
||||
beforeEach(async () => {
|
||||
const initialize_request = request({
|
||||
jsonrpc: '2.0',
|
||||
id: 1,
|
||||
method: 'initialize',
|
||||
params: {
|
||||
protocolVersion: '2025-06-18',
|
||||
capabilities: {
|
||||
roots: { listChanged: true },
|
||||
},
|
||||
clientInfo: {
|
||||
name: 'test-client',
|
||||
version: '1.0.0',
|
||||
},
|
||||
},
|
||||
});
|
||||
session = transport.session();
|
||||
|
||||
await server.receive(initialize_request, {
|
||||
sessionId: 'svelte-autofixer-session',
|
||||
});
|
||||
session = transport.session();
|
||||
await session.initialize(
|
||||
'2025-06-18',
|
||||
{},
|
||||
{
|
||||
name: 'test-client',
|
||||
version: '1.0.0',
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
it('should add suggestions for js parse errors', async () => {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { add_compile_issues } from '../../autofixers/add-compile-issues.js';
|
||||
import { add_eslint_issues } from '../../autofixers/add-eslint-issues.js';
|
||||
import { add_autofixers_issues } from '../../autofixers/add-autofixers-issues.js';
|
||||
import { icons } from '../../icons/index.js';
|
||||
import { tool } from 'tmcp/utils';
|
||||
|
||||
export function svelte_autofixer(server: SvelteMcp) {
|
||||
server.tool(
|
||||
@@ -65,29 +66,15 @@ export function svelte_autofixer(server: SvelteMcp) {
|
||||
if (server.ctx.sessionId && server.ctx.custom?.track) {
|
||||
await server.ctx.custom?.track?.(server.ctx.sessionId, 'svelte-autofixer-wrong-version');
|
||||
}
|
||||
return {
|
||||
isError: true,
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `The desired_svelte_version MUST be either 4 or 5 but received "${desired_svelte_version_unchecked}"`,
|
||||
},
|
||||
],
|
||||
};
|
||||
return tool.error(
|
||||
`The desired_svelte_version MUST be either 4 or 5 but received "${desired_svelte_version_unchecked}"`,
|
||||
);
|
||||
}
|
||||
|
||||
const desired_svelte_version = parsed_version.output;
|
||||
|
||||
if (async && +desired_svelte_version < 5) {
|
||||
return {
|
||||
isError: true,
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `The async option can only be used with Svelte version 5 or higher.`,
|
||||
},
|
||||
],
|
||||
};
|
||||
return tool.error('The async option can only be used with Svelte version 5 or higher.');
|
||||
}
|
||||
|
||||
const content: {
|
||||
@@ -126,15 +113,7 @@ export function svelte_autofixer(server: SvelteMcp) {
|
||||
content.require_another_tool_call_after_fixing = true;
|
||||
}
|
||||
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: JSON.stringify(content),
|
||||
},
|
||||
],
|
||||
structuredContent: content,
|
||||
};
|
||||
return tool.structured(content);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
56
pnpm-lock.yaml
generated
56
pnpm-lock.yaml
generated
@@ -94,12 +94,15 @@ catalogs:
|
||||
'@tmcp/transport-http':
|
||||
specifier: ^0.8.3
|
||||
version: 0.8.3
|
||||
'@tmcp/transport-in-memory':
|
||||
specifier: ^0.0.5
|
||||
version: 0.0.5
|
||||
'@tmcp/transport-stdio':
|
||||
specifier: ^0.4.0
|
||||
version: 0.4.0
|
||||
tmcp:
|
||||
specifier: ^1.18.1
|
||||
version: 1.16.0
|
||||
specifier: ^1.19.0
|
||||
version: 1.19.0
|
||||
tooling:
|
||||
'@changesets/cli':
|
||||
specifier: ^2.29.7
|
||||
@@ -222,13 +225,13 @@ importers:
|
||||
version: link:../../packages/mcp-server
|
||||
'@tmcp/transport-http':
|
||||
specifier: catalog:tmcp
|
||||
version: 0.8.3(tmcp@1.16.0(typescript@5.9.2))
|
||||
version: 0.8.3(tmcp@1.19.0(typescript@5.9.2))
|
||||
'@vercel/analytics':
|
||||
specifier: catalog:tooling
|
||||
version: 1.5.0(@sveltejs/kit@2.43.5(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.6)(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.39.6)(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(tsx@4.20.6)(yaml@2.8.1)))(react@18.3.1)(svelte@5.39.6)
|
||||
tmcp:
|
||||
specifier: catalog:tmcp
|
||||
version: 1.16.0(typescript@5.9.2)
|
||||
version: 1.19.0(typescript@5.9.2)
|
||||
devDependencies:
|
||||
'@eslint/compat':
|
||||
specifier: catalog:lint
|
||||
@@ -316,7 +319,10 @@ importers:
|
||||
version: link:../mcp-schema
|
||||
'@tmcp/adapter-valibot':
|
||||
specifier: catalog:tmcp
|
||||
version: 0.1.4(tmcp@1.16.0(typescript@5.9.2))(valibot@1.1.0(typescript@5.9.2))
|
||||
version: 0.1.4(tmcp@1.19.0(typescript@5.9.2))(valibot@1.1.0(typescript@5.9.2))
|
||||
'@tmcp/transport-in-memory':
|
||||
specifier: catalog:tmcp
|
||||
version: 0.0.5(tmcp@1.19.0(typescript@5.9.2))
|
||||
'@typescript-eslint/parser':
|
||||
specifier: catalog:lint
|
||||
version: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)
|
||||
@@ -337,7 +343,7 @@ importers:
|
||||
version: 1.4.0(svelte@5.39.6)
|
||||
tmcp:
|
||||
specifier: catalog:tmcp
|
||||
version: 1.16.0(typescript@5.9.2)
|
||||
version: 1.19.0(typescript@5.9.2)
|
||||
ts-blank-space:
|
||||
specifier: catalog:tooling
|
||||
version: 0.6.2
|
||||
@@ -380,14 +386,14 @@ importers:
|
||||
version: 9.36.0(jiti@2.6.0)
|
||||
tmcp:
|
||||
specifier: catalog:tmcp
|
||||
version: 1.16.0(typescript@5.9.2)
|
||||
version: 1.19.0(typescript@5.9.2)
|
||||
devDependencies:
|
||||
'@sveltejs/mcp-server':
|
||||
specifier: workspace:^
|
||||
version: link:../mcp-server
|
||||
'@tmcp/transport-stdio':
|
||||
specifier: catalog:tmcp
|
||||
version: 0.4.0(tmcp@1.16.0(typescript@5.9.2))
|
||||
version: 0.4.0(tmcp@1.19.0(typescript@5.9.2))
|
||||
'@types/node':
|
||||
specifier: catalog:tooling
|
||||
version: 24.5.2
|
||||
@@ -1733,6 +1739,11 @@ packages:
|
||||
'@tmcp/auth':
|
||||
optional: true
|
||||
|
||||
'@tmcp/transport-in-memory@0.0.5':
|
||||
resolution: {integrity: sha512-m8l4+GdCj3NNwVxClnE8fV0yVn5ihpXhIsoOTG3CxeKoC/4H5+HPXeIIb25uSfFt6rccDfqH7DDPjMGDfPtoXA==}
|
||||
peerDependencies:
|
||||
tmcp: ^1.17.0
|
||||
|
||||
'@tmcp/transport-stdio@0.4.0':
|
||||
resolution: {integrity: sha512-GPfYj8Yn7OqLv7yDzOzonZ2E9SyPphgmmiByBfhNYKBb5Mzp5aSVUJ3cjuiOOz4ZvpM9FzwMmxOt8wNURZxjmQ==}
|
||||
peerDependencies:
|
||||
@@ -3929,8 +3940,8 @@ packages:
|
||||
resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
|
||||
tmcp@1.16.0:
|
||||
resolution: {integrity: sha512-E2ypyH00XoNaliR+gilZAtWGQBkgfrCT2bjEcJsnlVwZfsHYOTMp9Q8K9G5JtDB/UaCP2TJyjp+UG5BumUc/4Q==}
|
||||
tmcp@1.19.0:
|
||||
resolution: {integrity: sha512-wOY449EdaWDo7wLZEOVjeH9fn/AqfFF4f+3pDerCI8xHpy2Z8msUjAF0Vkg01aEFIdFMmiNDiY4hu6E7jVX79w==}
|
||||
|
||||
to-regex-range@5.0.1:
|
||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||
@@ -5573,26 +5584,31 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
|
||||
'@tmcp/adapter-valibot@0.1.4(tmcp@1.16.0(typescript@5.9.2))(valibot@1.1.0(typescript@5.9.2))':
|
||||
'@tmcp/adapter-valibot@0.1.4(tmcp@1.19.0(typescript@5.9.2))(valibot@1.1.0(typescript@5.9.2))':
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.0.0
|
||||
'@valibot/to-json-schema': 1.3.0(valibot@1.1.0(typescript@5.9.2))
|
||||
tmcp: 1.16.0(typescript@5.9.2)
|
||||
tmcp: 1.19.0(typescript@5.9.2)
|
||||
valibot: 1.1.0(typescript@5.9.2)
|
||||
|
||||
'@tmcp/session-manager@0.2.1(tmcp@1.16.0(typescript@5.9.2))':
|
||||
'@tmcp/session-manager@0.2.1(tmcp@1.19.0(typescript@5.9.2))':
|
||||
dependencies:
|
||||
tmcp: 1.16.0(typescript@5.9.2)
|
||||
tmcp: 1.19.0(typescript@5.9.2)
|
||||
|
||||
'@tmcp/transport-http@0.8.3(tmcp@1.16.0(typescript@5.9.2))':
|
||||
'@tmcp/transport-http@0.8.3(tmcp@1.19.0(typescript@5.9.2))':
|
||||
dependencies:
|
||||
'@tmcp/session-manager': 0.2.1(tmcp@1.16.0(typescript@5.9.2))
|
||||
'@tmcp/session-manager': 0.2.1(tmcp@1.19.0(typescript@5.9.2))
|
||||
esm-env: 1.2.2
|
||||
tmcp: 1.16.0(typescript@5.9.2)
|
||||
tmcp: 1.19.0(typescript@5.9.2)
|
||||
|
||||
'@tmcp/transport-stdio@0.4.0(tmcp@1.16.0(typescript@5.9.2))':
|
||||
'@tmcp/transport-in-memory@0.0.5(tmcp@1.19.0(typescript@5.9.2))':
|
||||
dependencies:
|
||||
tmcp: 1.16.0(typescript@5.9.2)
|
||||
json-rpc-2.0: 1.7.1
|
||||
tmcp: 1.19.0(typescript@5.9.2)
|
||||
|
||||
'@tmcp/transport-stdio@0.4.0(tmcp@1.19.0(typescript@5.9.2))':
|
||||
dependencies:
|
||||
tmcp: 1.19.0(typescript@5.9.2)
|
||||
|
||||
'@tsconfig/node10@1.0.11': {}
|
||||
|
||||
@@ -7896,7 +7912,7 @@ snapshots:
|
||||
|
||||
tinyrainbow@3.0.3: {}
|
||||
|
||||
tmcp@1.16.0(typescript@5.9.2):
|
||||
tmcp@1.19.0(typescript@5.9.2):
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.0.0
|
||||
json-rpc-2.0: 1.7.1
|
||||
|
||||
@@ -36,8 +36,9 @@ catalogs:
|
||||
tmcp:
|
||||
'@tmcp/adapter-valibot': ^0.1.4
|
||||
'@tmcp/transport-http': ^0.8.3
|
||||
'@tmcp/transport-in-memory': ^0.0.5
|
||||
'@tmcp/transport-stdio': ^0.4.0
|
||||
tmcp: ^1.18.1
|
||||
tmcp: ^1.19.0
|
||||
tooling:
|
||||
'@changesets/cli': ^2.29.7
|
||||
'@svitejs/changesets-changelog-github-compact': ^1.2.0
|
||||
|
||||
Reference in New Issue
Block a user