Accio ServiceMeow
一个嵌入式案例/票务管理平台 主控程序 服务器,使克劳德等人工智能助手能够通过自然语言创建、更新和分类支持票。
特性
- MCP集成 --16个工具通过Streamable HTTP公开,用于代理AI工作流
- 富文本编辑 --带有代码块、链接和图像的TipTap编辑器
- SLA跟踪 --使用MTTA/MTTR指标按优先级配置目标
- 审计跟踪 --每个票突变都记录有参与者、字段、旧/新值
- 全文检索 --PostgreSQL支持票和笔记的搜索
- 批量操作 --跨多个票证更新状态、分配或优先级
- 基于角色的访问 -具有JWT+neneneba API密钥身份验证的管理员和代理角色
- 自签名TLS --自动生成的证书,支持自定义证书
快速开始
先决条件: 码头工人 和
./setup.sh这将:
- 创建
.env从.env.example(如果不存在) - 为生成随机秘密
JWT_SECRET,POSTGRES_PASSWORD,以及DEFAULT_ADMIN_PASSWORD - 复制
seed.json.example到seed.json用于示例数据 - 构建并启动所有容器
- 等待健康检查并打印您的登录凭据
运行后,打开输出中显示的URL并接受自签名证书警告。
Manual setup
cp .env.example .env
# Edit .env to set your own secrets
docker compose up --build -d默认凭据: admin / change-me-in-production (从 .env.example)
建筑
Browser ──► nginx (TLS) ──┬──► FastAPI backend ──► PostgreSQL
│ ├─ REST API (/api/v1/)
│ └─ MCP server (/mcp/)
└──► Static frontend (React SPA)| 图层 | 技术 |
|---|---|
| 前端 | React 18、TypeScript、Vite、顺风CSS、TanStack查询、TipTap |
| 后端 | FastAPI、SQLAlchemy 2(异步)、Alembic、Pydantic v2 |
| 数据库 | PostgreSQL 16 |
| 代理 | 带有自动生成或自定义TLS的nginx |
| Auth | JWT(承载)+API密钥(api_key 头球 |
连接克劳德桌面
Claude Desktop仅支持基于stdio的MCP服务器,因此您需要 mcp-proxy 以桥接到HTTP端点。
- 安装mcp代理:
pipx install mcp-proxy- 创建API密钥 在ServiceMeow UI下 管理>API密钥.
- 增添
claude_desktop_config.json:
{
"mcpServers": {
"servicemeow": {
"command": "mcp-proxy",
"args": [
"--transport=streamablehttp",
"--no-verify-ssl",
"--headers", "api_key", "YOUR_API_KEY",
"https://localhost:8889/mcp/"
]
}
}
}- 重新启动克劳德桌面 拿起新服务器。
注: --no-verify-ssl 是自签名证书所必需的。如果使用受信任的TLS证书,请将其删除。连接克劳德代码
Claude Code通过以下方式连接 mcp-proxy 使用一个 .mcp.json 项目根目录中的文件。
增添 .mcp.json:
{
"mcpServers": {
"servicemeow": {
"command": "mcp-proxy",
"args": [
"--transport=streamablehttp",
"--no-verify-ssl",
"--headers", "api_key", "YOUR_API_KEY",
"https://localhost:8889/mcp/"
]
}
}
}注: --no-verify-ssl 是自签名证书所必需的。如果使用受信任的TLS证书,请将其删除。可用的MCP工具
| 工具 | 说明 |
|---|---|
create_ticket | 创建一个新的支持票,包括标题、描述、优先级和组 |
get_ticket | 通过UUID或票证编号(ASM-XXXX)获取票证详细信息 |
update_ticket | 更新票证标题、描述、状态或优先级 |
assign_ticket | 将工单分配或重新分配给组和/或用户 |
list_tickets | 使用分页搜索和过滤门票 |
add_ticket_note | 为工单添加注释(仅支持内部注释) |
get_ticket_notes | 通过UUID或票证编号获取票证的所有注释 |
resolve_ticket | 解决问题,可选择添加解决说明 |
bulk_update_tickets | 跨多个工单批量更新状态或分配 |
get_dashboard_summary | 按状态、优先级和组获取票计数 |
get_sla_metrics | 使用可选的组/优先级/日期过滤器获取MTTA/MTTR指标 |
list_groups | 列出所有包含成员数量的支持组 |
list_users | 列出用户,可选择按组筛选 |
get_ticket_audit_log | 获取工单的完整审计跟踪 |
get_my_tickets | 列出分配给已验证用户的票证 |
get_system_info | 获取可用状态、优先级、角色和系统配置 |
MCP对话示例
创建工单:
“创建一个名为“登录页面超时”的高优先级票证,分配给平台团队,描述用户在登录页面上看到30秒的加载时间。”
分诊入场券:
“显示所有打开的工单。对于未分配给用户的任何关键工单,请将其分配给管理员,并添加一条注释,说明我们正在调查。”
搜索和调查:
“搜索提到‘超时’的工单。显示最新工单的备注和审核日志。”
解决问题:
“解决ASM-0001问题,并附上说明,说明根本原因是缺少数据库索引,该索引已部署到生产环境中。”
环境变量
看 .env.example 对于所有可用配置。
| 变量 | 默认值 | 描述 |
|---|---|---|
ASM_PORT | 8889 | 端口nginx正在监听 |
POSTGRES_USER | servicemeow | 数据库用户 |
POSTGRES_PASSWORD | change-me-in-production | 数据库密码 |
POSTGRES_DB | servicemeow | 数据库名称 |
JWT_SECRET | change-me-in-production | JWT签名密钥 |
DEFAULT_ADMIN_USERNAME | admin | 初始管理员用户名 |
DEFAULT_ADMIN_PASSWORD | change-me-in-production | 初始管理员密码 |
DEFAULT_ADMIN_EMAIL | admin@servicemeow.local | 初始管理员电子邮件 |
ALLOWED_ORIGINS | ["https://localhost:8889"] | CORS允许的来源 |
MCP_PATH | /mcp | MCP端点安装路径 |
MAX_UPLOAD_SIZE_MB | 25 | 最大文件上传大小(MB) |
自定义TLS证书
首次启动时会自动生成自签名证书。要使用您自己的:
- 地方
cert.pem和key.pem在nginx/certs/ - 重新启动堆栈:
docker compose restart nginx
项目结构
accio-servicemeow/
├── backend/
│ ├── app/
│ │ ├── api/routes/ # FastAPI route handlers
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── services/ # Business logic layer
│ │ ├── mcp/ # MCP server and tool definitions
│ │ └── main.py # App entrypoint
│ ├── alembic/ # Database migrations
│ ├── tests/ # Pytest test suite
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── api/ # API client with JWT refresh
│ │ ├── components/ # Shared UI components
│ │ ├── context/ # Auth and Theme providers
│ │ ├── hooks/ # TanStack Query hooks
│ │ ├── pages/ # Route page components
│ │ └── utils/ # Formatting and SLA utilities
│ ├── index.html
│ └── package.json
├── nginx/
│ ├── nginx.conf.template # Nginx config (envsubst template)
│ ├── Dockerfile
│ └── entrypoint.sh # TLS cert generation
├── docker-compose.yml
├── seed.json.example # Sample data for seeding
└── .env.example运行测试
docker compose exec backend pytest tests/ -v构建于
- 快速API --异步Python web框架
- SQL炼金术2 --使用asyncpg的异步ORM
- FastMCP --MCP服务器框架
- 反应 + 维特 --前端工具链
- 顺风 CSS --实用程序优先CSS
- TipTap 的 --富文本编辑器
- TanStack查询 --异步数据获取
- PostgreSQL --关系数据库
- 引擎X --带有TLS终止的反向代理
