Slate MCP服务器
用于管理票证和待办事项的模型上下文协议(MCP)服务器,由SQLite支持。
概述
Slate是一个MCP服务器,它通过一个简单的SQLite数据库提供创建和管理工单和待办事项的工具。它旨在与支持MCP协议的AI助手和开发工具集成。
特性
- 类型安全验证 对所有数据操作使用Pydantic模型
- 全面的现场验证 包括长度限制和格式检查
- 基于枚举的状态和优先级值 为了获得一致的数据
- ISO 8601日期格式验证 截止日期
- SQLite后端 具有适当的外键关系
- MCP协议支持 用于与AI助手集成
先决条件
- Python 3.10+
- UV(用于依赖性管理)
设置
- 克隆存储库:
git clone
cd slate- 安装依赖项:
uv sync- 创建并初始化数据库:
# Create the database directory
mkdir -p ~/.slate
# Set the database path environment variable
export SQLITE_DB=~/.slate/slate.db
# Initialize the database with schema (creates the file and tables)
uv run python -c "from mcp_slate.db import init_db; init_db('$SQLITE_DB')"发展
运行测试
# Run all tests
uv run python -m pytest
# Run specific test file
uv run python -m pytest tests/test_validation.py
# Run tests with verbose output
uv run python -m pytest -v添加依赖关系
# Add a new dependency
uv add package-name
# Add a development dependency
uv add --dev package-name在本地运行MCP服务器
# Run the server directly
uv run python mcp_slate/server.py
# Or run with specific database path
SQLITE_DB=./test.db uv run python mcp_slate/server.py光标集成
将其添加到您的全局Cursor MCP配置中 mcpServers 对象(通常在 ~/.cursor/mcp.json):
"slate": {
"command": "uv",
"args": [
"--directory",
"/slate",
"run",
"mcp_slate/server.py"
],
"env": {
"SQLITE_DB": "/.db"
}
}确保更新 ABS_PATH 和 DATABASE_NAME 占位符路径,以匹配您的机器配置。
工具
门票
add_ticket(project_id, title, description, status, priority):创建新票证list_tickets():列出所有门票get_ticket(id):获取门票详细信息
全部
add_todo(ticket_id, description, status, due_date):创建新待办事项list_todos(ticket_id):列出票的待办事项update_todo_status(id, status):更新所有状态
数据库操作
list_tables():列出所有数据库表schema(table):获取表架构信息run_select(sql, params, limit):执行SELECT查询(有安全限制)
表结构
门票桌
CREATE TABLE tickets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id TEXT NOT NULL, -- simple label for project
title TEXT NOT NULL, -- short summary
description TEXT, -- details
status TEXT CHECK(status IN (
'open', 'in-progress', 'blocked', 'closed'
)) DEFAULT 'open',
priority TEXT CHECK(priority IN (
'low', 'medium', 'high', 'urgent'
)) DEFAULT 'medium',
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
);所有桌子
CREATE TABLE todos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ticket_id INTEGER NOT NULL, -- link to parent ticket
description TEXT NOT NULL, -- todo text
status TEXT CHECK(status IN (
'pending', 'in-progress', 'done'
)) DEFAULT 'pending',
due_date TEXT, -- optional deadline
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(ticket_id) REFERENCES tickets(id) ON DELETE CASCADE
);