Thành phần | Vai trò |
---|---|
LLM (vd: Claude) | Gửi yêu cầu qua stdin |
MCP Server (Node.js) | Nhận và xử lý yêu cầu |
TSDoc Markdown | Tài liệu được tạo sẵn giúp LLM đọc hiểu |
praha/byethrowlà thư viện cải thiện xử lý lỗi trong TypeScript bằng cách áp dụng lập trình hàm. Sử dụng loại Result để xử lý lỗi rõ ràng thay vì ném ngoại lệ, đảm bảo luồng lỗi an toàn kiểu. Cung cấp các combinator như pipe, andThen, map giúp viết code dễ đọc, kết hợp và gỡ lỗi.
typedoc.json
{ "$schema": "https://typedoc.org/schema.json", "entryPoints": ["./src/index.ts"], "plugin": ["typedoc-plugin-markdown"], "router": "kind", "readme": "none", "indexFormat": "table", "hidePageHeader": true, "hideBreadcrumbs": true, "useCodeBlocks": true, "preserveLinkText": false}
[FunctionName](./FunctionName)
thường gây nhiễu cho LLMs, nên cần tạo plugin tùy chỉnh:// @ts-checkimport { MarkdownPageEvent } from 'typedoc-plugin-markdown';
export const load = (app) => { app.renderer.on(MarkdownPageEvent.END, (page) => { page.contents = page.contents .replaceAll(/Defined in: \[[^\]]+\]\([^\)]+\)\s*/g, '') .replaceAll(/\[(`?)(.+?)\1\]\([^\)]+\)/g, (_match, _quote, label) => `\`${label}\``); });};
// rsbuild.config.tsimport { defineConfig } from '@rslib/core';
export default defineConfig({ source: { tsconfigPath: './tsconfig.build.json', }, lib: [{ format: 'esm' }], tools: { rspack: { module: { rules: [ { test: /\.md$/, type: 'asset/source', }, ], }, }, },});
// global.d.ts/// <reference types="@rspack/core/module" />
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';import packageJson from '../package.json';
const server = new McpServer( { name: '@praha/byethrow', version: packageJson.version, }, { instructions: 'Sử dụng server này để lấy tài liệu và ví dụ về @praha/byethrow.', });
const loadDocument = (key: string) => { return import.meta.webpackContext('../docs')(key) as string;};
server.tool( 'ModuleReference', 'Trả về tổng quan về @praha/byethrow và các module xuất khẩu.', () => ({ content: [{ type: 'text', text: loadDocument('./modules/Result.md') }], }));
import { z } from 'zod';
server.tool( 'FunctionReference', 'Trả về tham chiếu và ví dụ hàm cụ thể.', { name: z.string().describe('Tên hàm.') }, ({ name }) => ({ content: [{ type: 'text', text: loadDocument(`./functions/Result.${name}.md`) }], }));
server.tool( 'TypeReference', 'Trả về tham chiếu và ví dụ kiểu cụ thể.', { name: z.string().describe('Tên kiểu dữ liệu.') }, ({ name }) => ({ content: [{ type: 'text', text: loadDocument(`./types/Result.${name}.md`) }], }));
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const transport = new StdioServerTransport();await server.connect(transport);
settings.json
của VSCode:{ "mcp": { "servers": { "my-mcp-server": { "type": "stdio", "command": "node", "args": ["{path-to-mcp}/dist/index.js"] } } }}
[info] Starting server my-mcp-server[info] Connection state: starting[info] Starting server from LocalProcess extension host[info] Connection state: running[info] Discovered 3 tools