票务管理服务器

Slate MCP Server 是一个基于SQLite的模型上下文协议(MCP)服务器,用于管理票务和待办事项,支持与AI助手和开发工具的集成。

  • by jebeene
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 jebeene/slate

使用说明

Slate MCP服务器

用于管理票证和待办事项的模型上下文协议(MCP)服务器,由SQLite支持。

概述

Slate是一个MCP服务器,它通过一个简单的SQLite数据库提供创建和管理工单和待办事项的工具。它旨在与支持MCP协议的AI助手和开发工具集成。

特性

  • 类型安全验证 对所有数据操作使用Pydantic模型
  • 全面的现场验证 包括长度限制和格式检查
  • 基于枚举的状态和优先级值 为了获得一致的数据
  • ISO 8601日期格式验证 截止日期
  • SQLite后端 具有适当的外键关系
  • MCP协议支持 用于与AI助手集成

先决条件

  • Python 3.10+
  • UV(用于依赖性管理)

设置

  1. 克隆存储库:
git clone <repository-url>
cd slate
  1. 安装依赖项:
uv sync
  1. 创建并初始化数据库:
# 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",
        "<ABS_PATH>/slate",
        "run",
        "mcp_slate/server.py"
      ],
      "env": {
        "SQLITE_DB": "<ABS_PATH>/<DATABASE_NAME>.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
);