模型上下文协议服务器

MCP(Model Context Protocol)是一个标准协议,使AI模型能够安全地访问外部工具和数据,适用于AI开发、自动化工作流和实时数据查询等多种场景。

  • by onesound71
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 onesound71/enhanced-mcp-server

使用说明

🚀 Enhanced MCP Server-向我的同事介绍MCP

📚 目录

  1. 什么是MCP?
  2. 了解项目结构
  3. MCP服务器工作原理
  4. 源代码详细分析
  5. 实践:运行MCP服务器
  6. 创建自定义工具

🤔 什么是MCP?

**MCP(Model Context Protocol)**是AI模型安全访问外部工具和数据的标准协议。

🏗️ MCP的核心概念

┌─────────────┐    MCP Protocol    ┌─────────────┐
│   AI Model  │ ←──────────────→   │ MCP Server  │
│ (Cursor AI) │                    │ (우리 서버) │
└─────────────┘                    └─────────────┘
                                           │
                                           ▼
                                   ┌─────────────┐
                                   │   Tools &   │
                                   │    Data     │
                                   └─────────────┘

🤷‍♂️ 为什么需要MCP?

问:AI已经很聪明了,为什么需要MCP? A:AI只知道学习过的数据。不知道我们公司的实时员工信息、项目状态、密码等!

Q:直接给AI数据不行吗? A:安全上很危险,如果数据持续变化,每次都要重新学习AI。MCP提供实时、安全的数据!

🌟 MCP的强大优势:只要做一次就可以在任何地方使用!

        🏢 우리가 만든 MCP 서버
                    │
    ┌───────────────┼───────────────┐
    │               │               │
    ▼               ▼               ▼
┌─────────┐   ┌─────────┐   ┌─────────┐
│Cursor AI│   │   n8n   │   │ Make.com│
│  코딩   │   │ 워크플로우│   │자동화툴 │
└─────────┘   └─────────┘   └─────────┘
    │               │               │
    ▼               ▼               ▼
"김개발 정보     "매일 오전      "Slack에
 알려줘"         직원 현황       급여 정보
                보고서 생성"     알림 전송"

🎯 实际使用情形

📝 方案1:开发者(Cursor AI)

개발자: "김개발님이 담당한 프로젝트 진행률이 어떻게 되나요?"
AI: MCP 서버에서 데이터 조회 → "MCP-Integration 프로젝트 65% 완료"
개발자: "그럼 예상 완료일은?"
AI: "2025년 7월 15일 마감 예정입니다"

🔄 方案2:自动化(n8n)

매일 오전 9시 자동 실행:
1. MCP 서버에서 모든 직원 정보 조회
2. 휴가 중인 직원 필터링
3. 관리자에게 이메일 발송
4. Slack 채널에 현황 업데이트

📊 场景3:无代码自动化(Make.com)

프로젝트 마감일 알림 시스템:
1. MCP 서버에서 프로젝트 상태 확인
2. 마감일 7일 전인 프로젝트 찾기
3. 담당자에게 자동 알림 전송
4. 진행률이 50% 미만이면 관리자에게 에스컬레이션

🔍 更具体的问题和答案

问:一台MCP服务器真的可以在多个平台上使用吗? A:是的!MCP是标准协议,一旦创建:

  • 从Cursor AI到编码助手
  • n8n到工作流自动化
  • 从Make.com到无代码自动化
  • 甚至可以在自己制作的应用程序中使用!

问:如何管理安全性? A:在MCP服务器上集中管理权限:

// 예: 급여 정보는 HR 부서만 접근 가능
if (requestType === 'salary' && !user.hasRole('HR')) {
  throw new Error('권한이 없습니다');
}

Q:也可以实时数据吗? A:当然可以!

// 실시간 시스템 모니터링
async getRealtimeSystemStatus() {
  return {
    cpu: getCurrentCPUUsage(),
    memory: getCurrentMemoryUsage(),
    timestamp: new Date().toISOString()
  };
}

🚀 MCP的实际业务价值

传统方法 MCP方法 改进效果
每次手动检查数据 AI自动查询 节省90%时间
每个工具单独联动开发 一次开发即可联动所有工具💰 开发成本降低70%
数据不一致风险 单源一致性保证🎯 准确度提高99%
安全策略分布式管理集中安全管理🔒 安全风险降低80%

简单地说:如果AI问“告诉我金开发员工的信息”,MCP服务器将在公司数据库中查找信息,并起到向AI传达信息的中间桥梁作用!


📁 了解项目结构

enhanced-mcp-server/
├── 📄 package.json          # 프로젝트 설정 파일
├── 🔧 enhanced-server.js    # MCP 서버 메인 코드
├── 🎯 .cursor-mcp.json     # Cursor AI 연동 설정
├── 🧪 test-enhanced.js     # 테스트 파일
└── 📚 README.md            # 이 파일!

每个文件的角色

文件 角色 新员工需要知道的事情
package.json 项目信息和依赖性管理 npm包管理的基础
enhanced-server.js MCP服务器的核心逻辑 最重要的文件!
.cursor-mcp.json 与Cursor AI建立连接 AI如何找到我们的服务器
test-enhanced.js 服务器测试代码 开发后如何验证

⚙ENT MCP服务器工作原理

步骤1:初始化服务器

// enhanced-server.js의 핵심 부분
class EnhancedMcpServer {
  constructor() {
    // 🗄️ 회사 데이터베이스 (AI가 모르는 정보!)
    this.companyDatabase = {
      employees: [
        { id: 'EMP001', name: '김개발', department: 'Engineering', salary: 8500 },
        // ... 더 많은 직원 정보
      ]
    };
    
    // 🔧 MCP 서버 생성
    this.server = new Server({
      name: 'enhanced-mcp-server',
      version: '2.0.0'
    });
  }
}

步骤2:注册“工具”(Tools)

// AI가 사용할 수 있는 도구들을 정의
{
  name: 'query_employee_database',
  description: '🏢 회사 직원 데이터베이스에서 정보를 조회합니다',
  inputSchema: {
    type: 'object',
    properties: {
      query_type: { type: 'string', enum: ['all', 'by_department', 'by_name'] },
      filter: { type: 'string', description: '필터 값' }
    }
  }
}

步骤3:工具运行逻辑

// AI가 도구를 호출하면 실행되는 함수
async queryEmployeeDatabase(queryType, filter) {
  const employees = this.companyDatabase.employees;
  
  switch (queryType) {
    case 'by_name':
      return employees.filter(emp => emp.name.includes(filter));
    case 'by_department':
      return employees.filter(emp => emp.department === filter);
    default:
      return employees;
  }
}

🔍 源代码详细分析

📄 package.json분석

{
  "name": "enhanced-mcp-server",
  "version": "2.0.0",
  "type": "module",                    // ← ES6 모듈 사용
  "dependencies": {
    "@modelcontextprotocol/sdk": "^0.4.0"  // ← MCP 공식 SDK
  }
}

新职员积分:

  • "type": "module":使用最新的JavaScript语法
  • MCP SDK:OpenAI创建的官方库

🎯 .cursor-mcp.json분석

{
  "mcpServers": {
    "enhanced-mcp-server": {
      "command": "node",
      "args": ["enhanced-server.js"],
      "cwd": "/Users/sangsoonhwang/Documents/GitHub/enhanced-mcp-server"
    }
  }
}

新职员积分:

  • Cursor AI寻找我们服务器的GPS般的角色
  • command:服务器运行命令
  • cwd:服务器所在的文件夹位置

🔧 enhanced-server.js核心结构

1.类结构

class EnhancedMcpServer {
  constructor() {
    this.companyDatabase = { /* 데이터 */ };  // 📊 데이터 저장소
    this.server = new Server(/* 설정 */);     // 🔧 MCP 서버
    this.setupToolHandlers();                 // 🛠️ 도구 설정
  }
}

2.工具注册过程

setupToolHandlers() {
  // 📋 사용 가능한 도구 목록 제공
  this.server.setRequestHandler(ListToolsRequestSchema, async () => {
    return {
      tools: [
        {
          name: 'query_employee_database',
          description: '직원 정보 조회',
          inputSchema: { /* 입력 형식 정의 */ }
        }
        // ... 더 많은 도구들
      ]
    };
  });

  // 🔧 도구 실행 처리
  this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
    const { name, arguments: args } = request.params;
    
    switch (name) {
      case 'query_employee_database':
        return await this.queryEmployeeDatabase(args.query_type, args.filter);
      // ... 다른 도구들
    }
  });
}

3.实际业务逻辑

async queryEmployeeDatabase(queryType, filter) {
  console.log(`🔍 직원 조회: ${queryType}, 필터: ${filter}`);
  
  const employees = this.companyDatabase.employees;
  let result;

  switch (queryType) {
    case 'by_name':
      result = employees.filter(emp => emp.name.includes(filter));
      break;
    case 'by_department':
      result = employees.filter(emp => emp.department === filter);
      break;
    case 'all':
    default:
      result = employees;
  }

  return {
    content: [{
      type: 'text',
      text: `📊 조회 결과: ${JSON.stringify(result, null, 2)}`
    }]
  };
}

🚀 实践:运行MCP服务器

步骤1:安装依赖性

npm install

步骤2:测试服务器

npm test

预计输出:

🧪 간단한 MCP 테스트 시작...

📋 파일 확인:
✅ package.json - 존재함
✅ enhanced-server.js - 존재함
✅ .cursor-mcp.json - 존재함

🎉 기본 설정 확인 완료!

步骤3:运行服务器

npm start

第4步:在各种平台上进行测试

🎯 在Cursor AI中测试

  1. 在Cursor AI中打开此项目文件夹
  2. 允许MCP服务器连接
  3. 尝试以下问题:
    • “请查询我们公司工程部门的员工”
    • “告诉我金开发职员的信息”
    • “帮我破译ALPHA-7代码”

🔄 在n8n中联动

{
  "nodes": [
    {
      "name": "MCP Server Call",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "http://localhost:3000/mcp",
        "method": "POST",
        "body": {
          "tool": "query_employee_database",
          "args": {
            "query_type": "by_department",
            "filter": "Engineering"
          }
        }
      }
    }
  ]
}

n8n工作流示例:

  1. 调度程序:每天上午9点运行
  2. MCP呼叫:查看员工现状
  3. 数据加工:度假者,按项目分类
  4. 发送通知:Slack/通过电子邮件发送报告

📊 在Make.com上集成

// Make.com HTTP 모듈 설정
{
  "url": "http://localhost:3000/mcp",
  "method": "POST",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "tool": "get_project_status",
    "args": {
      "project_name": "MCP-Integration"
    }
  }
}

Make.com场景示例:

  1. 触发器:检测Google Sheets更新
  2. MCP查询:查看员工的项目信息
  3. 条件分支:根据进度的不同动作
  4. 动作:自动发送电子邮件或Slack通知

🔌 直接调用API

# curl을 사용한 직접 호출
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "tool": "query_employee_database",
    "args": {
      "query_type": "by_name",
      "filter": "김개발"
    }
  }'

🐍 在Python中使用

import requests

def get_employee_info(name):
    response = requests.post('http://localhost:3000/mcp', json={
        'tool': 'query_employee_database',
        'args': {
            'query_type': 'by_name',
            'filter': name
        }
    })
    return response.json()

# 사용 예
employee = get_employee_info('김개발')
print(f"직원 정보: {employee}")

🛠️ 创建自定义工具

如何添加新工具

步骤1:添加工具定义

// setupToolHandlers() 메서드의 tools 배열에 추가
{
  name: 'calculate_bonus',
  description: '직원 보너스 계산',
  inputSchema: {
    type: 'object',
    properties: {
      employee_id: { type: 'string', description: '직원 ID' },
      performance_score: { type: 'number', description: '성과 점수 (1-10)' }
    },
    required: ['employee_id', 'performance_score']
  }
}

步骤2:添加执行逻辑

// CallToolRequestSchema 핸들러의 switch문에 추가
case 'calculate_bonus':
  return await this.calculateBonus(args.employee_id, args.performance_score);

步骤3:实现方法

async calculateBonus(employeeId, performanceScore) {
  const employee = this.companyDatabase.employees.find(emp => emp.id === employeeId);
  
  if (!employee) {
    throw new McpError(ErrorCode.InvalidRequest, `직원 ${employeeId}를 찾을 수 없습니다`);
  }

  const baseBonus = employee.salary * 0.1; // 기본 보너스 10%
  const performanceMultiplier = performanceScore / 10;
  const finalBonus = baseBonus * performanceMultiplier;

  return {
    content: [{
      type: 'text',
      text: `💰 ${employee.name}님의 보너스: ${finalBonus.toLocaleString()}만원 (성과점수: ${performanceScore}/10)`
    }]
  };
}

🎯 新员工的关键点

一定要记住的事情

  1. MCP=AI和数据之间的桥梁

    • 安全地提供AI无法直接访问的数据
  2. 工具(Tool)=AI可用的功能

    • 每个工具都有明确的目的和输入/输出格式
  3. 方案(Schema)=工具手册

    • 指导AI正确使用工具
  4. 异步处理(async/await)

    • 所有工具的运行都是异步的

🚨 注意事项

  • 保安:在适当的权限检查后提供敏感信息
  • 错误处理:有关意外输入的正确错误消息
  • 性能:处理大数据时考虑分页

🌐 跨平台集成提示

问:从哪个平台开始比较好? A:推荐顺序:

  1. 光标AI (最简单)→开发过程中立即测试
  2. n8n (中等难度)→通过可视化工作流构建自动化
  3. Make.com (中等难度)→无代码实现复杂场景
  4. 直接API调用 (高级)→定制应用程序开发

问:各平台的优缺点?

平台优点缺点推荐用途 |--------|------|------|-----------| | 光标AI | 🟢 设置简单,立即使用|🔴 仅在开发环境中使用|在开发期间查询数据| | n8n | 🟢 开源、可视化编辑|🔴 需要安装服务器|自动化内部工作流| | Make.com | 🟢 云,多种联动|🔴 收费,复杂的设置|外部服务集成| | 직접 API | 🟢 完全控制,自定义|🔴 需要开发知识开发专用应用程序

📈 下一步

  1. 创建更复杂的工具:数据库联动、API调用等
  2. 增强的安全性:认证,添加权限管理系统
  3. 监视:构建日志记录、度量收集系统
  4. 多平台支持:添加REST API端点
  5. 实时通知:通过WebSocket集成实时数据推送

🤝 如果需要帮助

  • MCP官方文档: https://modelcontextprotocol.io/
  • GitHub问题:注册项目问题
  • 团队导师:有什么疑问,请随时提问!

🎉 恭喜!现在大家也迈出了MCP专家的第一步!