🚀 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 项目的关注和支持!如需更多帮助,请随时联系我们的社区。