AI服务器工具集

MCP AI Server是一个本地优先的AI工作空间,通过HTTP暴露工具,兼容OpenAI Apps SDK和任何MCP客户端,提供认证聊天、供应商路由、仪表盘和管理控制。

  • by kostasuser01gr
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 kostasuser01gr/mcpserver

使用说明

MCP AI服务器

用于车队运营的本地MCP服务器和AI工作区。通过HTTP上的模型上下文协议(MCP)公开工具,与OpenAI Apps SDK和任何MCP客户端兼容。集成的MCP AI Server客户端提供经过身份验证的聊天、提供商路由、仪表板和管理控件。

本地免费运行 --SQLite用于存储,免费的云AI模型,没有付费API,没有云依赖关系。

产品组合审查用户体验: 客户端根路由是一个公共概览,而不是登录墙。受保护的聊天和管理界面仍然需要身份验证。

实时部署状态: 此存储库当前没有经过验证的公共演示URL。如果GitHub主页或README链接指向一个无关的应用程序,请不要将其用于OpenAI MCP注册。

零充电模式: 此存储库首先是本地的。除非您明确批准托管平台更改和任何可能的计费风险,否则不要运行部署、链接、托管密钥或平台项目命令。

OpenAI平台说明: 将此服务器注册为OpenAI应用程序需要 公共HTTPS URL 和 域验证。服务器本身不需要任何运行成本,但您需要一种将其暴露在互联网上的方法(请参阅 暴露您的服务器 在......下面


特征

  • MCP服务器 --通过JSON-RPC提供6个车队管理工具
  • MCP AI服务器客户端 --类似ChatGPT的界面,包含10多种免费AI模型
  • 智能路由器 --自动选择最快的可用提供商,自动回退速率限制
  • SSE流媒体 --逐个令牌的即时响应
  • 渐进式网络应用 --可从浏览器安装在任何设备/操作系统上
  • 管理面板 -管理模型、API密钥和用户
  • 仪表盘 --使用统计数据、提供者健康状况、令牌指标

快速开始

# 1. Server
cd server
cp ../.env.example ../.env   # Edit: set MCP_API_KEY, JWT_SECRET, add AI provider keys
npm install
npm run build
npm start

# 2. Client (in a new terminal)
cd client
npm install
npm run dev
  • 服务器:http://localhost:3030/health
  • 客户:http://localhost:3001
  • 首次注册→ 成为 所有者 (完全管理员权限)

人工智能提供商(所有免费等级)

提供者 型号 速度 获取密钥
赛博拉斯 骆驼3.3 70B ~2000吨/秒 网站 cloud.cerebras.ai
格罗克 Llama 3.3 70B,3.1 8B,混音 即时 console.groq.com/keys
谷歌双子座 双子座2.0闪光,思维敏捷 aistudio.google.com/apikey
Together.ai Llama 3.1 70B 快 api.together.xyz
米斯特拉尔 米斯特拉尔小 快 安慰.米斯特拉尔.ai
开放路由 Llama 3.1 8B(免费) 快速 openrouter.ai/keys
SambaNova 骆驼3.1 405B 中号 ambanova.ai云

添加密钥 .env 或在运行时通过 管理员→ API密钥。你不需要全部——路由器会自动从可用的提供商中选择。

端点

方法 路径 身份验证 描述
得到 /health 否 健康检查
职位 /mcp x-api-key MCP JSON-RPC(工具/列表、工具/调用)
得到 /.well-known/mcp-verification.txt 否 OpenAI的域验证
职位 /api/v1/auth/signup 否 创建帐户
职位 /api/v1/auth/login 否 登录→ JWT
得到 /api/v1/auth/me JWT 当前用户
职位 /api/v1/chat/stream JWT SSE流媒体聊天
得到 /api/v1/chat/conversations JWT 列出对话
得到 /api/v1/models JWT 可用的AI模型
得到 /api/v1/providers/health JWT 提供商状态
得到 /api/v1/stats JWT 使用统计
* /api/v1/admin/* JWT+管理员 用户、API密钥、审核日志

MCP工具

工具 说明
fleet_list_vehicles 列出带有可选状态/位置过滤器的车辆
fleet_update_status 更改车辆状态
wash_log_create 记录洗车记录
sales_log_create 记录销售交易
report_daily_summary 每日关键绩效指标:车队计数、清洗、销售/收入
knowledge_search 搜索。/知识/标记文件

环境变量

变量 默认值 描述
PORT 3030 HTTP端口
MCP_API_KEY (空) 生产时需要 AUTH_MODE=api_key
AUTH_MODE api_key api_key 或 no_auth
JWT_SECRET dev-secret... JWT签名密钥(必须在生产中更改)
MCP_VERIFICATION_TOKEN (空) OpenAI域验证令牌回退
DB_PATH ./data/app.db SQLite数据库文件
LOG_LEVEL info debug, info, warn, error
CLIENT_ORIGIN http://localhost:3001 客户端的CORS源
GROQ_API_KEY (空) Groq供应商密钥
GEMINI_API_KEY (空) 谷歌Gemini密钥
CEREBRAS_API_KEY (空) 大脑钥匙
SAMBANOVA_API_KEY (空) SambaNova钥匙
TOGETHER_API_KEY (空) Together.ai密钥
OPENROUTER_API_KEY (空) OpenRouter密钥
MISTRAL_API_KEY (空) 西北风钥匙

认证

默认情况下,所有请求 /mcp 要求a x-api-key 标题匹配 MCP_API_KEY.

对于本地开发,set AUTH_MODE=no_auth 在 .env 跳过身份验证。

暴露您的服务器(公共HTTPS)

服务器运行在 http://localhost:3030 默认情况下。OpenAI MCP注册需要 公共HTTPS URL.

以下选项可能涉及托管平台状态或第三方帐户限制。在零费用模式下,保持服务器本地,未经明确批准不得运行这些命令。

选项 成本 URL稳定性 最适合
Vercel 免费层可用 稳定 托管,无本地隧道进程
Cloudflare隧道(快速) 免费 重启时更改 快速本地测试
Cloudflare隧道(已命名) 免费 稳定 使用自己的域名进行自托管

选项A-Vercel(可选托管端点)

看 deploy/vercel.md.
您的OpenAI MCP URL将是: https://YOUR_APP.vercel.app/mcp.

重要提示:

  • 使用您控制的规范公共生产别名。
  • 不要为OpenAI使用特定于部署的别名或git别名,除非您有意在这些别名上禁用Vercel身份验证。
  • 不要在零收费模式下创建或部署Vercel项目。

选项B——Cloudflare隧道(本地运行+公开)

brew install cloudflared
cloudflared tunnel --url http://localhost:3030

复制 https://*.trycloudflare.com 终端中打印的URL。

有关稳定的隧道域,请参见 ops/cloudflare/setup.md 和 ops/cloudflare/config.example.yml.

OpenAI平台设置

需要a 公共HTTPS URL (参见 暴露您的服务器 上文)。

  1. 集 MCP_API_KEY 在 .env (或使用 AUTH_MODE=no_auth 用于初始测试)。
  2. 选择一个部署路径:
    • Vercel:从repo根目录部署 deploy/vercel.md
    • Cloudflare隧道:启动服务器(cd server && npm start)然后跑 cloudflared tunnel --url http://localhost:3030
  3. 在OpenAI平台上→ App → MCP服务器 步骤:
    • MCP服务器URL: https://YOUR_PUBLIC_HOSTNAME/mcp
    • 认证:选择 自定义页眉 → 头球 x-api-key,价值:你的 MCP_API_KEY。或选择 无身份验证 如果 AUTH_MODE=no_auth.
    • 点击 扫描工具 --需要6个工具。
  4. 域名验证:
    cd server && npm run set:verify-token -- "TOKEN_FROM_OPENAI"
    
    确认: curl https://YOUR_PUBLIC_HOSTNAME/.well-known/mcp-verification.txt --必须以纯文本形式返回确切的标记。 点击 验证域名 在形式上。
  5. 继续完成剩余步骤(测试→ 截图→ 提交)。

带故障排除的完整表单字段参考: ops/openai-form-pack.md

数据库

带WAL模式的SQLite。桌子: vehicles, washes, sales, audit_log, users, conversations, messages, api_keys, prompt_templates, usage_log.

种子演示数据:

npm run seed

DB文件在中自动创建 ./data/ 第一次开始。


以macOS服务运行(launchd)

登录时自动启动,崩溃时自动重启。

安装

./ops/macos/install.sh

这将:

  • 构建项目
  • 安装LaunchAgent plist ~/Library/LaunchAgents/
  • 立即启动服务

状态和日志

launchctl print gui/$(id -u)/com.mcp-ai-server.local
tail -f ~/Library/Logs/mcp-ai-server/out.log
tail -f ~/Library/Logs/mcp-ai-server/err.log

卸载

./ops/macos/uninstall.sh

盖子关闭/睡眠

当MacBook盖关闭时,macOS会休眠,网络也会关闭。服务器变成 不可达 --没有适用于电池的解决方法。

在交流电源上,您可以防止睡眠:

caffeinate -dimsu &          # Temporary — kill the process to re-enable sleep
sudo pmset -c sleep 0        # Persistent — revert with: sudo pmset -c sleep 10

为了实现真正的24/7可用性,请在没有盖子的设备上运行(Mac Mini、Raspberry Pi、云VM)。


测试

服务器单元测试使用 测试:

cd server
npm test          # single run
npm run test:watch # watch mode

客户皮棉:

cd client
npm run lint

冒烟测试

启动服务器,然后:

# In another terminal:
npm run smoke

这将验证:健康端点、MCP工具/列表、工具/调用、身份验证和验证文件。

故障排除

症状 修复
npm run build 失败 运行 npm install 第一。检查Node.js≥20。
端口3030正在使用 已设置 PORT=3031 在 .env,或终止旧进程
401开/mcp 设置 x-api-key 标题,或使用 AUTH_MODE=no_auth
401需要身份验证 *.vercel.app 使用您控制的规范别名,或在项目设置中禁用生产部署URL/别名的Vercel身份验证
404 NOT_FOUND on Vercel 确认root vercel.json + api/index.ts 存在,项目根目录为 .
FUNCTION_INVOCATION_FAILED 在Vercel上 检查运行时日志并验证所需的环境变量(MCP_API_KEY, JWT_SECRET, AUTH_MODE, DB_PATH)设置正确
数据库锁定错误 只有一个服务器进程可以访问数据库。停止重复。
launchd无法启动 检查 ~/Library/Logs/mcp-ai-server/err.log
盖子关闭时服务器停止 请参阅上文“盖子关闭”部分
OpenAI找不到工具 确保验证文件具有正确的令牌,URL可访问

项目结构

mcp-ai-server/
├── .editorconfig             # Editor formatting rules
├── .env.example              # Environment template
├── .gitignore
├── SECURITY.md               # Security & code scanning policy
├── .github/workflows/
│   ├── ci.yml                # CI: install → lint → test → build
│   └── codeql.yml            # CodeQL Code Scanning workflow
├── knowledge/                # Markdown files for knowledge_search tool
│   └── policies.md
├── org/                      # Org-wide templates
│   ├── _org_checklist.md     # Onboarding checklist for new repos
│   └── reusable-codeql.yml   # Reusable CodeQL workflow (workflow_call)
├── client/                   # Next.js 14 web app (AI Chat Hub)
│   ├── package.json
│   ├── next.config.ts
│   ├── tailwind.config.ts
│   ├── public/
│   │   ├── manifest.json     # PWA manifest
│   │   └── sw.js             # Service worker
│   └── src/
│       ├── app/              # App Router pages
│       │   ├── layout.tsx    # Root layout + meta
│       │   ├── login/        # Auth pages
│       │   ├── signup/
│       │   └── (app)/        # Protected pages
│       │       ├── chat/     # AI chat interface
│       │       ├── dashboard/# Usage stats
│       │       ├── admin/    # Model/user/key mgmt
│       │       ├── settings/ # User preferences
│       │       └── install/  # PWA install guide
│       ├── components/       # React components
│       ├── stores/           # Zustand state
│       ├── hooks/            # Custom hooks (PWA, etc.)
│       ├── lib/              # API client, utils
│       └── types/            # Shared TypeScript types
├── public/
│   └── .well-known/
│       └── mcp-verification.txt
├── ops/                      # Deployment & operations
│   ├── cloudflare/           # Tunnel setup
│   ├── macos/                # launchd service
│   └── openai-form-pack.md   # OpenAI registration guide
└── server/
    ├── package.json
    ├── tsconfig.json
    └── src/
        ├── index.ts           # Express entry point
        ├── config.ts          # Env validation (Zod)
        ├── logger.ts          # Structured JSON logger
        ├── smoke.ts           # Smoke test script
        ├── api/
        │   └── routes.ts      # REST API (auth, models, admin, stats)
        ├── auth/
        │   ├── middleware.ts   # x-api-key + JWT guards
        │   └── jwt.ts         # JWT sign/verify + user CRUD
        ├── chat/
        │   ├── routes.ts      # Chat endpoints + SSE streaming
        │   └── service.ts     # Conversation/message CRUD
        ├── db/
        │   ├── connection.ts  # SQLite singleton
        │   ├── schema.ts      # All table definitions
        │   └── seed.ts        # Demo data
        ├── llm/
        │   ├── router.ts      # Smart AI router (auto-fallback)
        │   ├── types.ts       # LLM type definitions
        │   └── providers/
        │       ├── catalog.ts          # Provider & model registry
        │       ├── openai-compatible.ts # Groq/Cerebras/Together/etc.
        │       └── gemini.ts           # Google Gemini adapter
        ├── mcp/
        │   ├── server.ts      # MCP Server factory
        │   └── routes.ts      # POST /mcp Express router
        └── tools/
            ├── registry.ts    # Tool registration + Zod→JSON Schema
            ├── fleet.ts       # fleet_list_vehicles, fleet_update_status
            ├── wash.ts        # wash_log_create
            ├── sales.ts       # sales_log_create
            ├── reports.ts     # report_daily_summary
            └── knowledge.ts   # knowledge_search

验收清单

启动服务器后运行以下命令以确认一切正常:

# 1. Health check
curl -s http://localhost:3030/health | grep '"ok":true'

# 2. MCP tools/list (6 tools expected)
curl -s http://localhost:3030/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'x-api-key: YOUR_KEY' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
  | grep -o '"name":"[^"]*"' | wc -l

# 3. Auth enforcement (expect 401)
curl -s -o /dev/null -w '%{http_code}' http://localhost:3030/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

# 4. Verification file (expect plain text token)
curl -i http://localhost:3030/.well-known/mcp-verification.txt

# 5. Smoke test (all-in-one)
cd server && MCP_API_KEY=YOUR_KEY npm run smoke

# 6. launchd status (if installed)
launchctl print gui/$(id -u)/com.mcp-ai-server.local
tail -5 ~/Library/Logs/mcp-ai-server/out.log

质量门和自动修复

太长,读不下去了

每个PR都要经过: 持续集成 (安装→ lint → test → 为服务器和客户端构建)+ CodeQL扫描 → 副驾驶自动修复 建议→ 合并前必须通过所需的状态检查。每周扫描会发现偏差。Sentry Copilot+Docker Copilot是可选的,但建议使用。

代码扫描(CodeQL)

  • 在每个PR和每周(星期一03:00 UTC)运行
  • 工作流程: .github/works/codeql.yml
  • 警报显示为PR注释和 安全→ 代码扫描警报
  • 副驾驶自动修复 可以直接在警报上建议补丁——接受前务必进行审核

哨兵副驾驶室扩建

  1. 安装 GitHub Copilot的哨兵 来自VS代码市场
  2. 通过扩展设置连接到您的Sentry项目
  3. 在Copilot聊天中,使用:
    • @sentry What are the most recent unresolved errors?
    • @sentry Suggest a fix for issue PROJ-1234
    • @sentry Generate unit tests for the fix in commit abc123

Docker复制品

  1. 安装 Docker for GitHub Copilot 来自VS代码市场
  2. 使用以下提示:
    • @docker Optimize this Dockerfile for smaller image size
    • @docker Add a healthcheck to my Compose service
    • @docker Scan this image for vulnerabilities

分支保护(所需状态检查)

  1. 首选 设置→ 分支→ 分支保护规则 为了 main
  2. 启用 合并前需要通过状态检查
  3. 添加必需的检查: code-scanning, Server (install → build → test), Client (install → lint → build)
  4. 启用 对管理员强制执行

GH CLI快捷方式:

gh api \
  -X PUT \
  -H "Accept: application/vnd.github+json" \
  /repos/<OWNER>/<REPO>/branches/main/protection \
  -f required_status_checks[strict]=true \
  -f 'required_status_checks[contexts][]=code-scanning' \
  -f 'required_status_checks[contexts][]=Server (install → build → test)' \
  -f 'required_status_checks[contexts][]=Client (install → lint → build)' \
  -f enforce_admins=true \
  -f restrictions=

组织范围模板

将可重用的工作流放置在您的组织仓库中 <OWNER>/.github/.github/workflows/reusable-codeql.yml 并从每个仓库的CI调用它。


PWA安装

web客户端是 渐进式网络应用。要在任何设备上安装:

  1. 在浏览器中打开应用程序
  2. 引导到 安装 在侧边栏中
  3. 点击 安装应用程序 (或按照页面上显示的浏览器特定说明进行操作)

适用于:Chrome、Edge、Safari(iOS 16+)、安卓。已安装的应用程序脱机工作(缓存资产),并像本机应用程序一样启动。


许可证

麻省理工学院


作者

康斯坦丁诺斯·福斯科拉基斯 全栈工程师——希腊克里特岛伊拉克利翁 github/kostasuser01gr


投资组合定位

该项目从零开始演示了模型上下文协议(MCP)的实现——构建了一个兼容的服务器,该服务器通过JSON-RPC公开类型化的车队管理工具,与OpenAI Apps SDK集成,并提供了一个具有自动回退路由的多提供商AI聊天客户端。PWA客户端、SSE流、JWT安全管理面板和SQLite支持的持久性是本地优先部署模型的生产风格决策。自动选择最快的可用人工智能提供商并依靠速率限制的智能路由器反映了生产人工智能系统所需的可靠性思维。零付费云依赖使其可运行和可演示,而无需计费。

作为投资组合级本地第一MCP服务器和AI工作区构建。当前公共版本的预计实施工作:4-7个重点开发日。