* Starts an MCP server instance using this DocsAgent engine.
()
| 253 | * Starts an MCP server instance using this DocsAgent engine. |
| 254 | */ |
| 255 | public async startMcpServer() { |
| 256 | await this.readyPromise; |
| 257 | const server = new McpServer({ |
| 258 | name: "DocsAgent", |
| 259 | version: "1.1.0", |
| 260 | }); |
| 261 | |
| 262 | server.tool( |
| 263 | "search", |
| 264 | { query: z.string().describe("The search query for local documents") }, |
| 265 | async ({ query }) => { |
| 266 | try { |
| 267 | const results = await this.search(query); |
| 268 | if (results.length === 0) return { content: [{ type: "text", text: "No results found." }] }; |
| 269 | const formatted = results.map(r => `[Score: ${r.score.toFixed(2)}]${r.path ? ` ${r.path}` : ""}${r.page ? ` (P${r.page})` : ""}\nContext: ${r.context}`).join("\n\n"); |
| 270 | return { content: [{ type: "text", text: formatted }] }; |
| 271 | } catch (error: any) { |
| 272 | return { content: [{ type: "text", text: error.message }], isError: true }; |
| 273 | } |
| 274 | } |
| 275 | ); |
| 276 | |
| 277 | server.tool( |
| 278 | "add_docs", |
| 279 | { dir: z.string().describe("The directory or file path to add") }, |
| 280 | async ({ dir }) => { |
| 281 | try { |
| 282 | await this.add(dir); |
| 283 | return { content: [{ type: "text", text: `Added ${dir}` }] }; |
| 284 | } catch (error: any) { |
| 285 | return { content: [{ type: "text", text: error.message }], isError: true }; |
| 286 | } |
| 287 | } |
| 288 | ); |
| 289 | |
| 290 | const transport = new StdioServerTransport(); |
| 291 | await server.connect(transport); |
| 292 | } |
| 293 | } |