@deepthonk/mcp 0.1.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/server.js ADDED
@@ -0,0 +1,206 @@
1
+ import { createServer } from "node:http";
2
+ import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
5
+ import { z } from "zod";
6
+ import { deepthonkExport, deepthonkMutate, deepthonkPlan, deepthonkRank, deepthonkResume, deepthonkRun, deepthonkStart, deepthonkStatus, deepthonkResult, deepthonkCancel, exportArgsSchema, jobArgsSchema, mutateArgsSchema, planArgsSchema, rankArgsSchema, resumeArgsSchema, runArgsSchema, runOutputSchema, startOutputSchema, statusOutputSchema, resultOutputSchema, cancelOutputSchema, resumeOutputSchema, rankOutputSchema, mutateOutputSchema, toolError, toolResult } from "./tools.js";
7
+ import { listRunResources, readJobResource, readRunResource, runResourceMimeType } from "./resources.js";
8
+ import { renderPrompt } from "./prompts.js";
9
+ export function createDeepThonkMcpServer() {
10
+ const server = new McpServer({
11
+ name: "deepthonk",
12
+ version: "0.1.0"
13
+ });
14
+ server.registerTool("deepthonk.plan", {
15
+ title: "Plan DeepThonk Budget",
16
+ description: "Estimate model calls for a DeepThonk profile.",
17
+ inputSchema: planArgsSchema.shape,
18
+ outputSchema: z.object({}).passthrough().describe("Budget plan with total calls and sequential rounds.")
19
+ }, async (args) => safeTool(() => toolResult(deepthonkPlan(args))));
20
+ server.registerTool("deepthonk.start", {
21
+ title: "Start DeepThonk Job",
22
+ description: "Start DeepThonk in the background and persist status in the run directory.",
23
+ inputSchema: runArgsSchema.shape,
24
+ outputSchema: startOutputSchema.shape
25
+ }, async (args) => safeTool(async () => toolResult(await deepthonkStart(args)), args.run_dir));
26
+ server.registerTool("deepthonk.status", {
27
+ title: "DeepThonk Job Status",
28
+ description: "Read persisted job/run status from a run directory.",
29
+ inputSchema: jobArgsSchema.shape,
30
+ outputSchema: statusOutputSchema.shape
31
+ }, async (args) => safeTool(async () => toolResult(await deepthonkStatus(args)), args.run_dir));
32
+ server.registerTool("deepthonk.result", {
33
+ title: "DeepThonk Job Result",
34
+ description: "Return final summary/resource URIs when a background job is complete.",
35
+ inputSchema: jobArgsSchema.shape,
36
+ outputSchema: resultOutputSchema.shape
37
+ }, async (args) => safeTool(async () => toolResult(await deepthonkResult(args)), args.run_dir));
38
+ server.registerTool("deepthonk.cancel", {
39
+ title: "Cancel DeepThonk Job",
40
+ description: "Request cancellation for a running job by writing cancel.json in the run directory.",
41
+ inputSchema: jobArgsSchema.shape,
42
+ outputSchema: cancelOutputSchema.shape
43
+ }, async (args) => safeTool(async () => toolResult(await deepthonkCancel(args)), args.run_dir));
44
+ server.registerTool("deepthonk.run", {
45
+ title: "Run DeepThonk",
46
+ description: "Run DeepThonk through the shared core engine.",
47
+ inputSchema: runArgsSchema.shape,
48
+ outputSchema: runOutputSchema.shape
49
+ }, async (args) => safeTool(async () => toolResult(await deepthonkRun(args)), args.run_dir));
50
+ server.registerTool("deepthonk.rank", {
51
+ title: "Rank Candidates",
52
+ description: "Rank supplied candidates with pairwise judging and Bradley-Terry aggregation.",
53
+ inputSchema: rankArgsSchema.shape,
54
+ outputSchema: rankOutputSchema.shape
55
+ }, async (args) => safeTool(async () => toolResult(await deepthonkRank(args))));
56
+ server.registerTool("deepthonk.mutate", {
57
+ title: "Mutate Candidate",
58
+ description: "Mutate one supplied candidate with critique.",
59
+ inputSchema: mutateArgsSchema.shape,
60
+ outputSchema: mutateOutputSchema.shape
61
+ }, async (args) => safeTool(async () => toolResult(await deepthonkMutate(args))));
62
+ server.registerTool("deepthonk.resume", {
63
+ title: "Resume Run",
64
+ description: "Detect whether a run can be resumed.",
65
+ inputSchema: resumeArgsSchema.shape,
66
+ outputSchema: resumeOutputSchema.shape
67
+ }, async (args) => safeTool(async () => toolResult(await deepthonkResume(args)), args.run_dir));
68
+ server.registerTool("deepthonk.export", {
69
+ title: "Export Run",
70
+ description: "Export a run summary or trace.",
71
+ inputSchema: exportArgsSchema.shape,
72
+ outputSchema: z.object({}).passthrough().describe("Exported run data in the requested format.")
73
+ }, async (args) => safeTool(async () => toolResult(await deepthonkExport(args)), args.run_dir));
74
+ server.registerResource("deepthonk-runs", "deepthonk://runs", {
75
+ title: "DeepThonk Runs",
76
+ mimeType: "application/json"
77
+ }, async (uri) => ({
78
+ contents: [{ uri: uri.href, mimeType: "application/json", text: await readRunResource(uri.href) }]
79
+ }));
80
+ server.registerResource("deepthonk-run-resource", new ResourceTemplate("deepthonk://runs/{run_id}/{resource}", {
81
+ list: async () => ({ resources: await listRunResources() })
82
+ }), {
83
+ title: "DeepThonk Run Resource",
84
+ mimeType: "text/plain"
85
+ }, async (uri) => {
86
+ const resource = uri.pathname.replace(/^\/+/, "").split("/")[1] ?? "trace";
87
+ const mimeType = runResourceMimeType(resource);
88
+ return { contents: [{ uri: uri.href, mimeType, text: await readRunResource(uri.href) }] };
89
+ });
90
+ server.registerResource("deepthonk-job-resource", new ResourceTemplate("deepthonk://jobs/{job_id}/{resource}", {
91
+ list: async () => ({ resources: [] })
92
+ }), {
93
+ title: "DeepThonk Job Resource",
94
+ mimeType: "application/json"
95
+ }, async (uri) => ({
96
+ contents: [{ uri: uri.href, mimeType: "application/json", text: await readJobResource(uri.href) }]
97
+ }));
98
+ registerPrompt(server, "deepthonk/generate", { task: z.string().min(1), rubric: z.string().optional() });
99
+ registerPrompt(server, "deepthonk/compare", {
100
+ task: z.string().min(1),
101
+ rubric: z.string().optional(),
102
+ candidateA: z.string().min(1),
103
+ candidateB: z.string().min(1)
104
+ });
105
+ registerPrompt(server, "deepthonk/mutate", {
106
+ task: z.string().min(1),
107
+ rubric: z.string().optional(),
108
+ candidate: z.string().min(1),
109
+ critique: z.string().default("")
110
+ });
111
+ registerPrompt(server, "deepthonk/finalize", {
112
+ task: z.string().min(1),
113
+ rubric: z.string().optional(),
114
+ candidate: z.string().min(1)
115
+ });
116
+ return server;
117
+ }
118
+ async function safeTool(action, runDir) {
119
+ try {
120
+ return await action();
121
+ }
122
+ catch (error) {
123
+ return toolError(error, runDir);
124
+ }
125
+ }
126
+ export async function serveMcp(options) {
127
+ if (options.transport === "http") {
128
+ await serveHttp(options.port ?? 3333);
129
+ return;
130
+ }
131
+ const server = createDeepThonkMcpServer();
132
+ await server.connect(new StdioServerTransport());
133
+ }
134
+ async function serveHttp(port) {
135
+ const allowedHosts = [`127.0.0.1:${port}`, `localhost:${port}`];
136
+ const httpServer = createServer(async (req, res) => {
137
+ if (req.url !== "/mcp") {
138
+ res.writeHead(404, { "content-type": "application/json" });
139
+ res.end(JSON.stringify({ error: "Not found" }));
140
+ return;
141
+ }
142
+ if (req.method !== "POST") {
143
+ res.writeHead(405, { "content-type": "application/json" });
144
+ res.end(JSON.stringify({ jsonrpc: "2.0", error: { code: -32000, message: "Method not allowed." }, id: null }));
145
+ return;
146
+ }
147
+ try {
148
+ const body = await readJsonBody(req);
149
+ const server = createDeepThonkMcpServer();
150
+ const transport = new StreamableHTTPServerTransport({
151
+ sessionIdGenerator: undefined,
152
+ // CVE-2025-66414 / GHSA-w48q-cv73-mx4w: SDK ships with protection OFF.
153
+ // Loopback bind blocks remote attackers; DNS rebinding still bypasses it via the browser.
154
+ enableDnsRebindingProtection: true,
155
+ allowedHosts
156
+ });
157
+ res.on("close", () => {
158
+ void transport.close();
159
+ void server.close();
160
+ });
161
+ await server.connect(transport);
162
+ await transport.handleRequest(req, res, body);
163
+ }
164
+ catch (error) {
165
+ if (!res.headersSent) {
166
+ const parseError = error instanceof SyntaxError;
167
+ res.writeHead(parseError ? 400 : 500, { "content-type": "application/json" });
168
+ res.end(JSON.stringify({
169
+ jsonrpc: "2.0",
170
+ error: { code: parseError ? -32700 : -32603, message: parseError ? "Parse error." : error.message },
171
+ id: null
172
+ }));
173
+ }
174
+ }
175
+ });
176
+ httpServer.listen(port, "127.0.0.1");
177
+ process.stderr.write(`DeepThonk MCP Streamable HTTP listening on http://127.0.0.1:${port}/mcp\n`);
178
+ await new Promise((resolve) => {
179
+ httpServer.on("close", resolve);
180
+ });
181
+ }
182
+ function registerPrompt(server, name, argsSchema) {
183
+ server.registerPrompt(name, {
184
+ title: name,
185
+ description: "DeepThonk prompt template.",
186
+ argsSchema
187
+ }, (args) => ({
188
+ messages: [
189
+ {
190
+ role: "user",
191
+ content: {
192
+ type: "text",
193
+ text: renderPrompt(name, args)
194
+ }
195
+ }
196
+ ]
197
+ }));
198
+ }
199
+ async function readJsonBody(req) {
200
+ const chunks = [];
201
+ for await (const chunk of req)
202
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
203
+ const text = Buffer.concat(chunks).toString("utf8");
204
+ return text.trim() ? JSON.parse(text) : undefined;
205
+ }
206
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}