数据索引分析服务

Cronos402 MCP Indexer 是一个为 Cronos402 生态系统提供数据持久化、分析和服务器发现的服务,支持实时事件聚合、质量评分和公共服务器目录管理。

  • by Cronos402
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Cronos402/mcp-indexer

使用说明

Cronos402 MCP索引器

Cronos402生态系统的分析和服务器目录服务。

生产URL:https://indexer.cronos402.dev

概述

MCP Indexer为Cronos402生态系统提供数据持久性、分析和服务器发现。它从MCP服务器获取使用事件,计算质量分数,并维护可用服务器的公共目录。开发人员可以通过这个集中索引发现服务、监控性能和调节服务器列表。

建筑

  • 框架:使用TypeScript的Express.js
  • 数据库:用PostgreSQL喷洒ORM
  • 分析:实时事件聚合
  • 节制:行政控制审批系统
  • 质量评分:自动化性能指标

特性

  • 从MCP服务器接收使用事件
  • 实时分析和指标
  • 公共服务器目录
  • 质量分数计算
  • 审核和批准工作流程
  • 性能跟踪(成功率、延迟、错误)
  • 搜索和过滤
  • 管理员审核工具

设置

  1. 复制 .env.example 到 .env:
DATABASE_URL=postgresql://user:password@localhost:5432/cronos402
INGESTION_SECRET=your-ingestion-secret
MODERATION_SECRET=your-moderation-secret
PORT=3010
  1. 运行迁移:
pnpm db:generate
pnpm db:migrate
  1. 启动服务器:
pnpm install
pnpm dev

API终点

公共端点

POST/摄入/事件

从MCP服务器接收使用事件。

请求:

{
  "serverId": "server-123",
  "toolName": "get_weather",
  "success": true,
  "latencyMs": 145,
  "errorType": null,
  "timestamp": "2024-01-22T12:00:00Z"
}

标题:

  • Authorization: Bearer ${INGESTION_SECRET}

POST/索引/运行

触发服务器的手动索引。

GET/事件/摘要

获取服务器的事件摘要。

查询参数:

  • origin (必填):服务器源URL

答复:

{
  "totalEvents": 1000,
  "successRate": 0.98,
  "avgLatencyMs": 150,
  "p95LatencyMs": 250,
  "errorRate": 0.02
}

GET/服务器

列出可用的MCP服务器。

查询参数:

  • include: approved | all (默认:已批准)
  • sort: score | recent (默认值:分数)
  • limit:结果数(默认值:20)
  • offset:分页偏移量(默认值:0)

答复:

{
  "servers": [
    {
      "id": "server-123",
      "name": "Weather API",
      "description": "Get weather data for any city",
      "url": "https://api.example.com/mcp",
      "qualityScore": 95,
      "status": "approved",
      "createdAt": "2024-01-01T00:00:00Z"
    }
  ],
  "total": 50,
  "limit": 20,
  "offset": 0
}

GET/server/:id

获取详细的服务器信息。

答复:

{
  "id": "server-123",
  "name": "Weather API",
  "description": "Get weather data for any city",
  "url": "https://api.example.com/mcp",
  "qualityScore": 95,
  "status": "approved",
  "stats": {
    "totalCalls": 10000,
    "successRate": 0.98,
    "avgLatency": 150,
    "p95Latency": 250
  },
  "tools": [
    {
      "name": "get_weather",
      "description": "Get current weather",
      "callCount": 5000
    }
  ]
}

管理端点

要求 Authorization: Bearer ${MODERATION_SECRET}

POST/servers/:id/中等

更新审核状态。

请求:

{
  "status": "approved" | "rejected" | "flagged" | "disabled",
  "reason": "Optional moderation reason"
}

POST/评分/重新计算

重新计算所有服务器的质量分数。

适度状态

  • 待定:新提交,等待审查
  • 批准:已核实并公开上市
  • 拒绝:不适合目录
  • 残疾的:管理员暂时禁用
  • 标记:需要注意

质量评分

从0到100计算,基于:

  • 成功率 (40%):成功呼叫的百分比
  • 延迟P95 (30%):第95百分位响应时间
  • 错误率 (20%):错误百分比
  • 运行时间 (10%):服务器可用性

公式:

const score =
  (successRate * 40) +
  (latencyScore * 30) +
  ((1 - errorRate) * 20) +
  (uptime * 10);

发展

# Install dependencies
pnpm install

# Start development server
pnpm dev

# Build for production
pnpm build

# Start production server
pnpm start

数据库操作

# Generate migrations
pnpm db:generate

# Run migrations
pnpm db:migrate

# Open Drizzle Studio
pnpm db:studio

数据库模式

核心表:

  • servers -已注册的MCP服务器
  • usage_events -来自服务器的事件日志
  • server_stats -汇总统计数据
  • moderation_log -管理员操作历史记录
  • quality_scores -计算绩效得分

部署

生产建设

pnpm build
NODE_ENV=production pnpm start

码头工人

FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
EXPOSE 3010
CMD ["pnpm", "start"]

环境要求

  • PostgreSQL数据库
  • HTTPS端点
  • 安全摄入秘密
  • 管理员审核密码

监控

  • GET /health -服务健康检查
  • GET /metrics -普罗米修斯指标
  • 数据库查询监控
  • 事件摄取率跟踪

整合

服务器注册

服务器在发送第一个事件时自动注册:

import axios from 'axios';

await axios.post('https://indexer.cronos402.dev/ingest/event', {
  serverId: 'my-server',
  toolName: 'my_tool',
  success: true,
  latencyMs: 100
}, {
  headers: {
    'Authorization': `Bearer ${INGESTION_SECRET}`
  }
});

客户端发现

查找可用服务器:

const response = await fetch(
  'https://indexer.cronos402.dev/servers?include=approved&sort=score'
);
const { servers } = await response.json();

资源

许可证

麻省理工学院