diff --git a/package.json b/package.json index f4d2b25a6..4339d982c 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,8 @@ "@sparticuz/chromium": "132.0.0", "@svelte-put/shortcut": "^3.2.0", "@sveltejs/adapter-vercel": "^5.7.2", + "@tmcp/adapter-zod-v3": "^0.2.1", + "@tmcp/transport-http": "^0.8.0", "@types/core-js": "^2.5.8", "@upstash/redis": "^1.35.1", "chroma-js": "^2.6.0", @@ -115,6 +117,7 @@ "svelte-local-storage-store": "^0.6.4", "svelte-turnstile": "^0.8.0", "sveltekit-search-params": "^2.1.2", + "tmcp": "^1.16.1", "ts-node": "^10.9.2", "unified": "^11.0.5", "waait": "^1.0.5", @@ -124,5 +127,8 @@ }, "prisma": { "seed": "node --loader ts-node/esm prisma/seed.ts" + }, + "volta": { + "node": "22.20.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28c8e74ac..a8dcd9aa9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,12 @@ importers: '@sveltejs/adapter-vercel': specifier: ^5.7.2 version: 5.7.2(@sveltejs/kit@2.5.27(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.35.3)(vite@5.4.19(@types/node@22.16.0)))(svelte@5.35.3)(vite@5.4.19(@types/node@22.16.0)))(rollup@4.44.2) + '@tmcp/adapter-zod-v3': + specifier: ^0.2.1 + version: 0.2.1(tmcp@1.16.1(typescript@5.8.3))(zod@3.25.75) + '@tmcp/transport-http': + specifier: ^0.8.0 + version: 0.8.0(tmcp@1.16.1(typescript@5.8.3)) '@types/core-js': specifier: ^2.5.8 version: 2.5.8 @@ -134,6 +140,9 @@ importers: sveltekit-search-params: specifier: ^2.1.2 version: 2.1.2(@sveltejs/kit@2.5.27(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.35.3)(vite@5.4.19(@types/node@22.16.0)))(svelte@5.35.3)(vite@5.4.19(@types/node@22.16.0)))(svelte@5.35.3)(vite@5.4.19(@types/node@22.16.0)) + tmcp: + specifier: ^1.16.1 + version: 1.16.1(typescript@5.8.3) ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@22.16.0)(typescript@5.8.3) @@ -1636,6 +1645,9 @@ packages: resolution: {integrity: sha512-7SAhVa4nHAP7bxEhnMFuwV7KNDqAF4RVGZNwRhvyss8lJNT7Syi9nPwIPYvsHtjJ1S7Nx8OL8uqe9V3a/ED/Mg==} engines: {node: '>= 16'} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@svelte-put/shortcut@3.2.0': resolution: {integrity: sha512-3VFU6TX4DwXT7vrtKGqwWa5WqEsFWQVZMSffE0owCwKUIBAhjGtZGy69G4+2quGhl/r+qi4jLrXkE00xw38M7g==} peerDependencies: @@ -1690,6 +1702,26 @@ packages: svelte: ^5.0.0-next.96 || ^5.0.0 vite: ^5.0.0 + '@tmcp/adapter-zod-v3@0.2.1': + resolution: {integrity: sha512-0CwZqyy1UFYlGvzBPdkxaMZJx7FKVUNqnU41VgZ4X5LCxHgf2/31ZGWcpFjCZNwoorrjcbFeABQ81ABJThRJ0w==} + peerDependencies: + tmcp: ^1.10.2 + zod: ^3.0.0 + + '@tmcp/session-manager@0.2.0': + resolution: {integrity: sha512-/MjEFFvnvrV3DbnwEAXMBKhIFmm7z81EgazBtPhKP9i5pe37/iDkYHOa+SD6aaqT3V7gACQ1nmqoJH3MdrC7gQ==} + peerDependencies: + tmcp: ^1.16.0 + + '@tmcp/transport-http@0.8.0': + resolution: {integrity: sha512-XkIFDIDr8zzQhJiwI+6He0pIGmEg0SAwHdsv914UtL0zqKuUfFvFLLARkryB95Rhp1ib4nVWAgLcV1FtdWGzIw==} + peerDependencies: + '@tmcp/auth': ^0.3.3 + tmcp: ^1.16.0 + peerDependenciesMeta: + '@tmcp/auth': + optional: true + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -3184,6 +3216,9 @@ packages: resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-rpc-2.0@1.7.1: + resolution: {integrity: sha512-JqZjhjAanbpkXIzFE7u8mE/iFblawwlXtONaCvRqI+pyABVz7B4M1EUNpyVW+dZjqgQ2L5HFmZCmOCgUKm00hg==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -4251,6 +4286,9 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + sqids@0.3.0: + resolution: {integrity: sha512-lOQK1ucVg+W6n3FhRwwSeUijxe93b51Bfz5PMRMihVf1iVkl82ePQG7V5vwrhzB11v0NtsR25PSZRGiSomJaJw==} + sqlstring@2.3.3: resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} engines: {node: '>= 0.6'} @@ -4471,6 +4509,9 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tmcp@1.16.1: + resolution: {integrity: sha512-pmqdFMfYi8e57p8bzpIkEtTt6GfAXGpub8rwySgo1yEEQogTpGdXFjGbISeS0SKrYN/MnIsHN6nj8gPjmAc+EQ==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4594,6 +4635,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-template-matcher@1.1.1: + resolution: {integrity: sha512-ooMjzxaqlquLZZU0Y+Ol+RAp5xav3oJ3qc3gO585QFmB9iX88ip8pflaCKKtkwPd40ro2noB8yQG2OhFddmddg==} + utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} @@ -4607,6 +4651,14 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + valibot@1.1.0: + resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + vfile-location@5.0.2: resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} @@ -4829,6 +4881,11 @@ packages: zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + peerDependencies: + zod: ^3.24.1 + zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} @@ -6251,6 +6308,8 @@ snapshots: - bare-buffer - debug + '@standard-schema/spec@1.0.0': {} + '@svelte-put/shortcut@3.2.0(svelte@5.35.3)': dependencies: svelte: 5.35.3 @@ -6332,6 +6391,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@tmcp/adapter-zod-v3@0.2.1(tmcp@1.16.1(typescript@5.8.3))(zod@3.25.75)': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/json-schema': 7.0.15 + tmcp: 1.16.1(typescript@5.8.3) + zod: 3.25.75 + zod-to-json-schema: 3.24.6(zod@3.25.75) + + '@tmcp/session-manager@0.2.0(tmcp@1.16.1(typescript@5.8.3))': + dependencies: + tmcp: 1.16.1(typescript@5.8.3) + + '@tmcp/transport-http@0.8.0(tmcp@1.16.1(typescript@5.8.3))': + dependencies: + '@tmcp/session-manager': 0.2.0(tmcp@1.16.1(typescript@5.8.3)) + esm-env: 1.2.2 + tmcp: 1.16.1(typescript@5.8.3) + '@tootallnate/quickjs-emscripten@0.23.0': {} '@tsconfig/node10@1.0.9': {} @@ -7937,6 +8014,8 @@ snapshots: json-parse-even-better-errors@3.0.2: {} + json-rpc-2.0@1.7.1: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -9251,6 +9330,8 @@ snapshots: sprintf-js@1.1.3: {} + sqids@0.3.0: {} + sqlstring@2.3.3: {} stackback@0.0.2: {} @@ -9506,6 +9587,16 @@ snapshots: tinyspy@3.0.2: {} + tmcp@1.16.1(typescript@5.8.3): + dependencies: + '@standard-schema/spec': 1.0.0 + json-rpc-2.0: 1.7.1 + sqids: 0.3.0 + uri-template-matcher: 1.1.1 + valibot: 1.1.0(typescript@5.8.3) + transitivePeerDependencies: + - typescript + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -9639,6 +9730,8 @@ snapshots: dependencies: punycode: 2.3.1 + uri-template-matcher@1.1.1: {} + utf-8-validate@5.0.10: dependencies: node-gyp-build: 4.8.4 @@ -9656,6 +9749,10 @@ snapshots: v8-compile-cache-lib@3.0.1: {} + valibot@1.1.0(typescript@5.8.3): + optionalDependencies: + typescript: 5.8.3 + vfile-location@5.0.2: dependencies: '@types/unist': 3.0.2 @@ -9857,6 +9954,10 @@ snapshots: zimmerframe@1.1.2: {} + zod-to-json-schema@3.24.6(zod@3.25.75): + dependencies: + zod: 3.25.75 + zod@3.24.1: {} zod@3.25.75: {} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index cc75f7f25..f7e479acb 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -10,6 +10,7 @@ import { dev } from '$app/environment'; import { UPSPLASH_TOKEN, UPSPLASH_URL } from '$env/static/private'; import { Redis } from '@upstash/redis'; import { nodeProfilingIntegration } from '@sentry/profiling-node'; +import { transport } from './lib/mcp'; export const cache_status = UPSPLASH_URL && UPSPLASH_TOKEN ? 'ONLINE' : 'OFFLINE'; @@ -106,6 +107,25 @@ export const safe_form_data: Handle = async function ({ event, resolve }) { return resolve(event); }; +export const mcp: Handle = async function ({ event, resolve }) { + const mcp_response = await transport.respond(event.request); + // we are deploying on vercel the SSE connection will timeout after 5 minutes...for + // the moment we are not sending back any notifications (logs, or list changed notifications) + // so it's a waste of resources to keep a connection open that will error + // after 5 minutes making the logs dirty. For this reason if we have a response from + // the MCP server and it's a GET request we just return an empty response (it has to be + // 200 or the MCP client will complain) + if (mcp_response && event.request.method === 'GET') { + try { + await mcp_response.body?.cancel(); + } catch { + // ignore + } + return new Response('', { status: 200 }); + } + return mcp_response ?? resolve(event); +}; + // * END HOOKS // Wraps requests in this sequence of hooks @@ -115,7 +135,8 @@ export const handle: Handle = sequence( auth, admin, safe_form_data, - document_policy + document_policy, + mcp ); export const handleError = Sentry.handleErrorWithSentry(); diff --git a/src/lib/mcp/icons/index.ts b/src/lib/mcp/icons/index.ts new file mode 100644 index 000000000..1acbc1c7a --- /dev/null +++ b/src/lib/mcp/icons/index.ts @@ -0,0 +1,13 @@ +import type { Icons } from 'tmcp'; + +export const icons: Icons['icons'] = [ + { + src: 'https://syntax.fm/android-chrome-192x192.png', + mimeType: 'image/png' + }, + { + // fallback to data:image format of the same image + src: 'data:image/png;base64,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', + mimeType: 'image/png' + } +]; diff --git a/src/lib/mcp/index.ts b/src/lib/mcp/index.ts new file mode 100644 index 000000000..3bee972c5 --- /dev/null +++ b/src/lib/mcp/index.ts @@ -0,0 +1,34 @@ +import { McpServer } from 'tmcp'; +import { ZodV3JsonSchemaAdapter } from '@tmcp/adapter-zod-v3'; +import { icons } from './icons/index.js'; +import { HttpTransport } from '@tmcp/transport-http'; +import { setup_tools } from './tools'; +import { setup_resources } from './resources'; + +export type SyntaxMCP = typeof server; + +const server = new McpServer( + { + description: 'MCP server to access Syntax episodes and transcripts', + name: 'Syntax MCP Server', + websiteUrl: 'https://syntax.fm', + version: '0.1.0', + icons + }, + { + adapter: new ZodV3JsonSchemaAdapter(), + capabilities: { + tools: {}, + resources: {}, + completions: {} + } + } +); + +setup_tools(server); +setup_resources(server); + +export const transport = new HttpTransport(server, { + cors: true, + path: '/mcp' +}); diff --git a/src/lib/mcp/resources/index.ts b/src/lib/mcp/resources/index.ts new file mode 100644 index 000000000..ff8bb3136 --- /dev/null +++ b/src/lib/mcp/resources/index.ts @@ -0,0 +1,96 @@ +import { prisma_client } from '$/server/prisma-client.js'; +import type { SyntaxMCP } from '../index.js'; +import { transcript_to_string } from '../utils.js'; +import { icons } from '../icons/index.js'; + +export function setup_resources(server: SyntaxMCP) { + server.template( + { + uri: 'syntaxfm://show/{slug}.json', + description: 'Get all info about a specific show given its slug', + name: 'show_info', + title: 'Show Info', + icons, + async list() { + const slugs = await prisma_client.show.findMany({ + select: { + slug: true, + title: true + }, + orderBy: { + date: 'desc' + } + }); + return slugs.map((s) => ({ + name: `${s.title}.json`, + value: s.slug, + uri: `syntaxfm://show/${s.slug}.json`, + title: `${s.title}.json` + })); + }, + complete: { + async slug(query) { + const slugs = await prisma_client.show.findMany({ + select: { + slug: true + }, + where: { + slug: { + contains: query.toString() + } + }, + take: 50 + }); + + return { + completion: { + values: slugs.map((s) => s.slug) + } + }; + } + } + }, + async (uri, { slug }) => { + const show = await prisma_client.show.findFirst({ + select: { + number: true, + show_notes: true, + title: true, + youtube_url: true, + date: true, + guests: true, + show_type: true, + url: true, + videos: true, + transcript: { + select: { + utterances: true + } + } + }, + where: { + slug: { + equals: slug.toString() + } + } + }); + + if (!show) throw new Error(`No show found with slug ${slug}`); + + return { + contents: [ + { + uri, + mimeType: 'application/json', + text: JSON.stringify({ + show: { + ...show, + transcript: show.transcript ? transcript_to_string(show.transcript) : '' + } + }) + } + ] + }; + } + ); +} diff --git a/src/lib/mcp/tools/index.ts b/src/lib/mcp/tools/index.ts new file mode 100644 index 000000000..05e9eb70f --- /dev/null +++ b/src/lib/mcp/tools/index.ts @@ -0,0 +1,198 @@ +import z from 'zod'; +import type { SyntaxMCP } from '../index.js'; +import { prisma_client } from '$/server/prisma-client.js'; +import { transcript_to_string } from '../utils.js'; +import { icons } from '../icons/index.js'; + +export function setup_tools(server: SyntaxMCP) { + server.tool( + { + name: 'list_episodes', + description: 'Get a list of all the episodes with relative show notes', + icons, + schema: z.object({ + query: z + .string() + .describe( + 'A comma separated list of keywords to search for in the title or the notes for the shows' + ) + .optional(), + year_cutoff: z + .number() + .optional() + .describe( + 'Only shows published after this year (YYYY) will be returned, will default to current year but better to ask the user for a specific range if possible' + ) + }), + outputSchema: z.object({ + shows: z.array( + z.object({ + show_notes: z.string(), + title: z.string(), + number: z.number() + }) + ) + }) + }, + async ({ query = '', year_cutoff }) => { + const year = new Date(); + if (year_cutoff) { + year.setFullYear(year_cutoff); + } + year.setMonth(0, 1); + + const shows = await prisma_client.show.findMany({ + select: { + number: true, + show_notes: true, + title: true + }, + where: { + AND: [ + { date: { gte: year } }, + { + OR: query.split(',').flatMap((query_part) => [ + { + title: { + contains: query_part.trim() + } + }, + { + show_notes: { + contains: query_part.trim() + } + } + ]) + } + ] + }, + orderBy: { + number: 'desc' + } + }); + return { + content: [ + { + type: 'text', + text: JSON.stringify({ shows }) + } + ], + structuredContent: { + shows + } + }; + } + ); + + server.tool( + { + name: 'get_episode', + description: 'Get information about a specific episode by its number', + icons, + schema: z.object({ + show_number: z + .number() + .describe('The number of the episode to get information about (e.g. 500 for episode 500)') + }) + }, + async ({ show_number }) => { + const show = await prisma_client.show.findFirst({ + select: { + number: true, + show_notes: true, + title: true, + youtube_url: true, + date: true, + guests: true, + show_type: true, + url: true, + videos: true, + transcript: { + select: { + utterances: true + } + } + }, + where: { + number: { + equals: show_number + } + } + }); + + if (!show) { + return { + isError: true, + content: [ + { + type: 'text', + text: `No show found with number ${show_number}` + } + ] + }; + } + + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + show: { + ...show, + transcript: show.transcript ? transcript_to_string(show.transcript) : '' + } + }) + } + ] + }; + } + ); + + server.tool( + { + name: 'get_transcript', + description: 'Get the transcript for a specific show number', + icons, + schema: z.object({ + show_number: z + .number() + .describe('The number of the episode to get transcript of (e.g. 500 for episode 500)') + }) + }, + async ({ show_number }) => { + const transcript = await prisma_client.transcript.findFirst({ + select: { + utterances: true + }, + where: { + show_number: { + equals: show_number + } + } + }); + + if (!transcript) { + return { + isError: true, + content: [ + { + type: 'text', + text: `No transcript found with number ${show_number}` + } + ] + }; + } + + const text = transcript_to_string(transcript); + + return { + content: [ + { + type: 'text', + text + } + ] + }; + } + ); +} diff --git a/src/lib/mcp/utils.ts b/src/lib/mcp/utils.ts new file mode 100644 index 000000000..d2cff21a2 --- /dev/null +++ b/src/lib/mcp/utils.ts @@ -0,0 +1,13 @@ +import type { Prisma } from '@prisma/client'; + +type TranscriptWithUtterances = Prisma.TranscriptGetPayload<{ + select: { utterances: true }; +}>; + +export function transcript_to_string(transcript: TranscriptWithUtterances): string { + return transcript.utterances + .map((utterance) => { + return `${utterance.start}-${utterance.end} ${utterance.speaker}: ${utterance.transcript_value}`; + }) + .join('\n'); +}