|
1 | 1 | // baseline-mcp-server.ts |
2 | | -import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; |
3 | | -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; |
| 2 | +import { McpServer } from "@modelcontextprotocol/server"; |
| 3 | +import { serveStdio } from "@modelcontextprotocol/server/stdio"; |
4 | 4 | import { z } from "zod"; |
5 | 5 | import { |
6 | 6 | getNegatedBrowserBaselineStatusAsMCPContent, |
7 | 7 | getWebFeatureBaselineStatusAsMCPContent, |
8 | 8 | } from "./tools/index.ts"; |
9 | | -import { BROWSERS, type Browsers } from "./types.ts"; |
| 9 | +import { BROWSERS } from "./types.ts"; |
10 | 10 | import DenoJSON from "./deno.json" with { type: "json" }; |
11 | 11 |
|
12 | | -// MCPサーバーの初期化 |
13 | | -const server = new McpServer({ |
14 | | - name: "Baseline MCP Server", |
15 | | - version: DenoJSON.version, |
16 | | - capabilities: { |
17 | | - tools: {}, |
18 | | - }, |
19 | | -}); |
| 12 | +export function createMCPServer(): McpServer { |
| 13 | + const server = new McpServer({ |
| 14 | + name: "Baseline MCP Server", |
| 15 | + version: DenoJSON.version, |
| 16 | + }); |
20 | 17 |
|
21 | | -// 特定の機能のBaselineステータスを取得 |
22 | | -server.tool( |
23 | | - "get_web_feature_baseline_status", |
24 | | - "クエリを指定し、Web Platform Dashboardからfeatureの結果を取得します", |
25 | | - { |
26 | | - query: z.string().array().describe("調べたい機能の名前"), |
27 | | - }, |
28 | | - async ({ query }: { query: string | string[] }) => { |
29 | | - return await getWebFeatureBaselineStatusAsMCPContent(query); |
30 | | - }, |
31 | | -); |
| 18 | + // 特定の機能のBaselineステータスを取得 |
| 19 | + server.registerTool( |
| 20 | + "get_web_feature_baseline_status", |
| 21 | + { |
| 22 | + description: |
| 23 | + "クエリを指定し、Web Platform Dashboardからfeatureの結果を取得します", |
| 24 | + inputSchema: z.object({ |
| 25 | + query: z.array(z.string()).describe("調べたい機能の名前"), |
| 26 | + }), |
| 27 | + }, |
| 28 | + async ({ query }) => { |
| 29 | + return await getWebFeatureBaselineStatusAsMCPContent(query); |
| 30 | + }, |
| 31 | + ); |
32 | 32 |
|
33 | | -// 特定のブラウザを除外した機能を検索 |
34 | | -server.tool( |
35 | | - "get_negated_browser_baseline_status", |
36 | | - "特定のブラウザを除外して、Web Platform Dashboardからfeatureの結果を取得します", |
37 | | - { |
38 | | - query: z.enum(BROWSERS).describe( |
39 | | - "除外したいブラウザの名前(chrome, edge, firefox, safari)", |
40 | | - ), |
41 | | - }, |
42 | | - async ({ query }: { query: Browsers }) => { |
43 | | - return await getNegatedBrowserBaselineStatusAsMCPContent(query); |
44 | | - }, |
45 | | -); |
| 33 | + // 特定のブラウザを除外した機能を検索 |
| 34 | + server.registerTool( |
| 35 | + "get_negated_browser_baseline_status", |
| 36 | + { |
| 37 | + description: |
| 38 | + "特定のブラウザを除外して、Web Platform Dashboardからfeatureの結果を取得します", |
| 39 | + inputSchema: z.object({ |
| 40 | + query: z.enum(BROWSERS).describe( |
| 41 | + "除外したいブラウザの名前(chrome, edge, firefox, safari)", |
| 42 | + ), |
| 43 | + }), |
| 44 | + }, |
| 45 | + async ({ query }) => { |
| 46 | + return await getNegatedBrowserBaselineStatusAsMCPContent(query); |
| 47 | + }, |
| 48 | + ); |
46 | 49 |
|
47 | | -// 起動 |
48 | | -async function setMCPServer() { |
49 | | - const transport = new StdioServerTransport(); |
50 | | - await server.connect(transport); |
51 | | - console.error("Baseline MCP Server running on stdio"); |
| 50 | + return server; |
52 | 51 | } |
53 | 52 |
|
54 | | -setMCPServer().catch((error) => { |
55 | | - console.error("Fatal error in setMCPServer():", error); |
56 | | - Deno.exit(1); |
57 | | -}); |
| 53 | +if (import.meta.main) { |
| 54 | + serveStdio(createMCPServer); |
| 55 | + console.error("Baseline MCP Server running on stdio"); |
| 56 | +} |
0 commit comments