🚀 MCP 項目
MCP(Model Context Protocol)項目旨在為 AI 應用提供一個統一接口,用於管理上下文信息流。它通過標準化數據格式和通信協議,解決了現有系統中上下文不一致、難以維護的問題,具有統一管理、可擴展、高可靠等特點。
🚀 快速開始
安裝依賴
npm install mcp-typescript mcp-zod mcp-communication-adapters
啟動服務器
npm run start:server
示例用法
import { Context } from 'mcp-typescript';
import { validateContext } from './utils/validation';
const context = {
id: '123',
timestamp: new Date(),
data: { user_id: '456' }
};
try {
const validatedContext = validateContext(context);
} catch (error) {
console.error('Validation failed:', error.message);
}
✨ 主要特性
- 統一的上下文管理:確保所有組件能夠以一致的方式訪問和更新上下文數據。
- 可擴展性:支持多種數據格式和通信協議,便於集成不同系統。
- 高可靠性:通過冗餘設計和錯誤恢復機制,保證關鍵任務中的穩定性。
📦 安裝指南
安裝依賴
npm install mcp-typescript mcp-zod mcp-communication-adapters
啟動服務器
npm run start:server
💻 使用示例
基礎用法
import { Context } from 'mcp-typescript';
import { validateContext } from './utils/validation';
const context = {
id: '123',
timestamp: new Date(),
data: { user_id: '456' }
};
try {
const validatedContext = validateContext(context);
} catch (error) {
console.error('Validation failed:', error.message);
}
高級用法
在實際項目中,可能需要處理更復雜的上下文數據和錯誤情況。以下是一個更高級的示例,展示瞭如何結合緩存和錯誤處理來優化上下文處理流程:
import { Context } from 'mcp-typescript';
import { validateContext } from './utils/validation';
import { ContextCache } from './caching';
const cache = new ContextCache();
async function processContext(context: unknown) {
try {
const cached = await cache.get(context.id);
if (cached) return cached;
const validated = validateContext(context);
cache.set(context.id, validated);
return validated;
} catch (error) {
console.error('Processing error:', error);
throw error;
}
}
📚 詳細文檔
詳細功能表
屬性 |
詳情 |
類別 |
核心組件、核心實用工具、度量實用工具、解析實用工具、安全實用工具、類型安全、構建和運行時、文檔和測試 |
特性 |
MCP 服務器、MCP 客戶端、配置、HTTP 傳輸、標準輸入輸出傳輸、記錄器、錯誤處理程序、請求上下文、Token 計數器、日期解析器、JSON 解析器、ID 生成器、限速器、數據清理、HTML 清理、敏感數據脫敏、全局類型、Zod 驗證、TypeScript 項目、命令行工具、文檔、測試套件 |
描述 |
核心服務邏輯,工具和資源註冊,傳輸處理。包含示例回聲工具和資源;連接到外部由 mcp-config.json 定義的 MCP 服務器的邏輯;環境感知設置,帶有 Zod 驗證;基於 Express 的服務器,帶 SSE、會話管理、CORS 和端口重試;處理 MCP 通過標準輸入/輸出進行的通信;結構化上下文感知日誌記錄(文件和 MCP 通知);集中的錯誤處理、分類和日誌記錄;請求/操作跟蹤和關聯;使用 tiktoken 估計令牌數量;使用 chrono-node 解析自然語言日期字符串;解析可能不完整的 JSON,處理 null 塊;生成唯一 ID(帶前綴或 UUID);基於密鑰的請求速率限制;使用 validator 和 zod 對各種數據類型進行檢查和驗證;使用 sanitize-html 防止注入攻擊;在日誌中自動進行數據脫敏處理;定義和管理項目中的所有核心接口,確保代碼的一致性和可維護性;使用 Zod 庫定義自驗證的結構化數據類型,在編譯時提供強類型支持;基於 TypeScript 實現,利用其靜態類型特性確保代碼質量並減少潛在錯誤;提供用於服務器啟動和其他管理任務的命令行界面;為開發人員提供完整的 API 文檔和使用指南,確保項目易於理解和維護;使用 Jest 和其他工具實現全面的單元測試、集成測試和端到端測試,保證代碼質量 |
所在位置 |
src/mcp-server/ 、src/mcp-client/ 、src/config/ 、src/mcp-client/configLoader.ts 、src/mcp-server/transports/httpTransport.ts 、src/mcp-server/transports/stdioTransport.ts 、src/utils/internal/logger.ts 、src/utils/internal/errorHandler.ts 、src/utils/internal/requestContext.ts 、src/utils/metrics/tokenCounter.ts 、src/utils/parsing/dateParser.ts 、src/utils/parsing/jsonParser.ts 、src/utils/security/idGenerator.ts 、src/utils/security/rateLimiter.ts 、src/utils/security/sanitization.ts 等、項目範圍內的 TypeScript 代碼庫、src/config/ 、src/server/ 等、整個項目代碼庫、src/cli/ 、項目中的 Markdown 文件、src/tests/ |
MCP 項目概述
項目目標
MCP(Model Context Protocol)旨在提供一個統一接口,用於在 AI 應用中管理上下文信息流。通過標準化數據格式和通信協議,MCP 解決了現有系統中常見的上下文不一致、難以維護的問題。
核心功能
- 統一的上下文管理:確保所有組件能夠以一致的方式訪問和更新上下文數據。
- 可擴展性:支持多種數據格式和通信協議,便於集成不同系統。
- 高可靠性:通過冗餘設計和錯誤恢復機制,保證關鍵任務中的穩定性。
技術選型
- TypeScript:提供靜態類型檢查,減少運行時錯誤。
- Zod:用於數據驗證,確保數據結構的正確性。
- Express:構建高效的 HTTP 服務器。
- Kafka:處理高吞吐量的消息傳遞。
核心組件
- 上下文管理器:負責維護當前上下文狀態,並提供接口供其他模塊讀寫。
- 數據轉換器:支持多種數據格式的自動轉換,確保兼容性。
- 通信適配器:實現不同協議(如 HTTP、WebSocket)的適配,方便集成。
設計原則
- 松耦合:各組件之間保持最低的依賴關係。
- 可擴展性:設計易於添加新功能和模塊。
- 高可用性:確保系統在部分故障時仍能繼續運行。
實現細節
- 數據模型:所有數據均定義為 TypeScript 接口,並通過 Zod 進行驗證,確保數據的完整性和正確性。
import { z } from 'zod';
export interface Context {
id: string;
timestamp: Date;
data: Record<string, any>;
}
const contextSchema = z.object({
id: z.string().min(1),
timestamp: z.date(),
data: z.record(z.any())
});
export const validateContext = (data: unknown): Context => {
try {
return contextSchema.parse(data);
} catch (error) {
throw new Error('Invalid context data');
}
};
- 通信協議:支持多種傳輸協議,通過適配器設計模式實現擴展。
export abstract class Adapter {
abstract send(data: unknown): Promise<void>;
abstract receive(): Promise<unknown>;
}
MCP 技術細節
數據模型設計
所有數據均通過 TypeScript 接口定義,並使用 Zod 進行嚴格驗證,確保系統內的數據一致性。
import { z } from 'zod';
export interface RequestContext {
id: string;
user: User;
metadata: Record<string, unknown>;
}
export interface User {
id: string;
name: string;
email?: string;
}
通信機制
支持多種協議,通過插件式設計實現擴展。
import { HttpAdapter } from './adapters/http';
const adapter = new HttpAdapter({
host: 'localhost',
port: 3000
});
async function sendContext(context: unknown) {
await adapter.send(context);
}
async function receiveContext() {
const received = await adapter.receive();
}
錯誤處理
統一的錯誤處理機制,確保系統在異常情況下的穩定運行。
import { AdapterError } from './errors';
try {
await sendContext(context);
} catch (error) {
if (error instanceof AdapterError) {
console.error('Adapter error:', error.message);
} else {
console.error('Unexpected error:', error);
}
}
性能優化
通過緩存和異步處理提升系統性能。
import { ContextCache } from './caching';
const cache = new ContextCache();
async function processContext(context: unknown) {
try {
const cached = await cache.get(context.id);
if (cached) return cached;
const validated = validateContext(context);
cache.set(context.id, validated);
return validated;
} catch (error) {
console.error('Processing error:', error);
throw error;
}
}
監控和日誌
集成專業的監控和日誌工具,便於系統維護。
import { Logger } from './logging';
const logger = new Logger('ContextProcessor');
async function processContext(context: unknown) {
try {
logger.info('Processing context with id:', context.id);
} catch (error) {
logger.error('Error processing context:', error);
throw error;
}
}
安全措施
通過身份驗證和數據加密,確保系統安全性。
import { Authenticator } from './security';
async function authenticate(user: User) {
return await Authenticator.validate(user.id, user.password);
}
MCP 常見問題解答
如何開始使用 MCP?
安裝依賴並參考官方文檔中的快速入門指南即可上手。
支持哪些數據格式?
目前支持 JSON、Protobuf 和 Avro,未來計劃增加更多格式。
是否有性能問題?
通過異步處理和緩存機制,MCP 在設計上考慮了高性能需求。
如何擴展 MCP?
可以通過插件式適配器輕鬆添加新功能和協議支持。
需要付費嗎?
目前 MCP 是開源項目,免費使用。商業支持可聯繫維護團隊。
MCP 項目貢獻
歡迎社區貢獻代碼、文檔和建議!
MCP 項目維護者
- Alice Johnson - 項目發起人 & 主要貢獻者
- Bob Smith - 核心開發成員
- Charlie Brown - 測試和文檔負責人
🔧 技術細節
數據模型設計
所有數據均通過 TypeScript 接口定義,並使用 Zod 進行嚴格驗證,確保系統內的數據一致性。
import { z } from 'zod';
export interface RequestContext {
id: string;
user: User;
metadata: Record<string, unknown>;
}
export interface User {
id: string;
name: string;
email?: string;
}
通信機制
支持多種協議,通過插件式設計實現擴展。
import { HttpAdapter } from './adapters/http';
const adapter = new HttpAdapter({
host: 'localhost',
port: 3000
});
async function sendContext(context: unknown) {
await adapter.send(context);
}
async function receiveContext() {
const received = await adapter.receive();
}
錯誤處理
統一的錯誤處理機制,確保系統在異常情況下的穩定運行。
import { AdapterError } from './errors';
try {
await sendContext(context);
} catch (error) {
if (error instanceof AdapterError) {
console.error('Adapter error:', error.message);
} else {
console.error('Unexpected error:', error);
}
}
性能優化
通過緩存和異步處理提升系統性能。
import { ContextCache } from './caching';
const cache = new ContextCache();
async function processContext(context: unknown) {
try {
const cached = await cache.get(context.id);
if (cached) return cached;
const validated = validateContext(context);
cache.set(context.id, validated);
return validated;
} catch (error) {
console.error('Processing error:', error);
throw error;
}
}
監控和日誌
集成專業的監控和日誌工具,便於系統維護。
import { Logger } from './logging';
const logger = new Logger('ContextProcessor');
async function processContext(context: unknown) {
try {
logger.info('Processing context with id:', context.id);
} catch (error) {
logger.error('Error processing context:', error);
throw error;
}
}
安全措施
通過身份驗證和數據加密,確保系統安全性。
import { Authenticator } from './security';
async function authenticate(user: User) {
return await Authenticator.validate(user.id, user.password);
}
感謝您對 MCP 項目的關注和支持!如需更多幫助,請隨時聯繫我們的社區。