Token导航 LogoToken导航

MCP Server · 数据服务

Structured Data MCP

StructuredDataMCP是一个无需编写Python代码,通过YAML定义SQLite数据库查询并快速生成MCP工具的服务,适用于数据分析和报告生成场景。

stdio官方级别未说明来源级核验工具 19
数据分析PythonClaudeClaude Desktop

快速开始

作者 / 组织
devjourney
提供方
devjourney
运行时
Python

工具数量

19

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

Structured Data MCP 属于数据服务类 MCP Server,公开资料标注 19 个工具,通过stdio 本地进程接入,适配 Claude Desktop、Claude,有可以直接复制的安装命令;接入前先确认权限范围。

分类

数据服务

传输方式

stdio

认证方式

无需认证

部署方式

公开资料未说明

安装与配置

安装命令

python -m venv .venv

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 Python,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 19 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

结构化数据MCP

SQLite的数据驱动MCP服务器,将数据库查询作为Claude Desktop工具公开,而无需编写Python代码。在YAML中定义查询,获取即时MCP工具。

特性

  • 零代码扩展性:通过创建YAML文件添加新的数据库查询——不需要Python
  • 类型安全:参数和约束的自动Pydantic验证
  • 只读安全:通过SQL验证强制只读数据库访问
  • 丰富的关系查询:支持多级JOIN和复杂聚合
  • 分页支持:用于大型结果集的内置限制/偏移参数
  • FastMCP集成:利用FastMCP实现无缝的Claude Desktop集成

建筑

YAML Query Definitions → QueryLoader → Pydantic Models → ToolFactory → MCP Tools
                                                              ↓
                                              QueryExecutor ← SQLValidator
                                                              ↓
                                                      SQLite Database

关键的原则:整个查询目录都存在于YAML文件中。Python层自动处理验证、执行和MCP工具生成。

快速开始

安装

# Clone the repository
git clone 
cd StructuredDataMCP

# Create virtual environment
python -m venv .venv
source .venv/bin/activate
# Windows CMD: .venv\Scripts\activate
# PowerShell:
#   Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
#   .\.venv\Scripts\Activate.ps1

# Install dependencies
pip install -e .

设置示例数据库

# Create sample database with schema or use the sample.db in the repo as-is
sqlite3 examples/sample.db = datetime('now', '-' || :days || ' days')
      ORDER BY o.created_at DESC
      LIMIT :limit OFFSET :offset

    parameters:
      - name: "days"
        type: "integer"
        description: "Number of days to look back"
        required: false
        default: 7
        constraints:
          minimum: 1
          maximum: 365

      - name: "limit"
        type: "integer"
        description: "Maximum number of results"
        required: false
        default: 20
        constraints:
          minimum: 1
          maximum: 100

      - name: "offset"
        type: "integer"
        description: "Number of results to skip"
        required: false
        default: 0
        constraints:
          minimum: 0

    output_schema:
      type: "object"
      properties:
        results:
          type: "array"
          items:
            type: "object"
            properties:
              order_id:
                type: "integer"
              username:
                type: "string"
              total_amount:
                type: "number"
              created_at:
                type: "string"
        count:
          type: "integer"

步骤2:重新启动MCP服务器

就是这样!不需要更改Python代码。服务器自动执行以下操作:

  1. 发现新的YAML文件
  2. 验证查询定义
  3. 生成具有类型安全参数的MCP工具
  4. 使其可用于Claude Desktop

查询定义模式

遵循以下约定以保持一致性:

SQL模式:

  • 使用 COALESCE(field, default) 在所有可为null的字段上
  • 字符串默认为 '',数字到 0
  • 使用命名参数: :param_name
  • 包括明确 ORDER BY 条款
  • 使用表别名(u、o、oi、p、c、r、ci)

分页:

  • 多记录查询应包括 limit 和 offset 参数
  • 使用 LIMIT :limit OFFSET :offset 在SQL中
  • 设置合理的默认值(限制:10-20,偏移:0)
  • 设置最大约束(限制:100)

输出架构:

  • 始终将结果打包 {results: [...], count: N} 格式
  • 定义输出模式中的所有字段
  • 将SQL列名与输出属性名匹配

命名:

  • 查询名称: {verb}_{entity}[_{modifier}]

- 示例: get_user_by_id, search_products, get_low_stock_products

  • 参数名称:snake_case
  • 使用描述性标题和描述

运作原理

1.查询加载(loader.py)

loader = QueryLoader(queries_dir="config/queries")
queries = loader.load_all_queries()

全部加载 .yaml 文件,根据Pydantic模型进行验证(QueryFile, QueryDefinition).

2.工具生成(factory.py)

tool = ToolFactory.create_tool(query_def, executor)

生成具有以下功能的FastMCP工具:

  • 基于参数的动态函数签名
  • 类型注解
  • 默认值
  • 完整文档字符串

3.查询执行(executor.py)

result = await executor.execute_query(query_def, arguments)

强制执行:

  • 只读数据库访问(mode=ro)
  • SQL验证(无插入/更新/删除/删除)
  • 参数验证(类型、约束)
  • 结果限制(最多1000行)
  • 查询超时(30秒)

4.MCP集成(main.py)

mcp = FastMCP("StructuredDataMCP")

@mcp.tool()
async def get_user_by_id(user_id: int):
    # Auto-generated from YAML
    ...

FastMCP处理MCP协议、Claude Desktop通信和工具调用。

安全功能

  • 只读访问:数据库已在中打开 mode=ro
  • SQL验证:基于正则表达式的验证块写入操作
  • 参数验证:类型检查和约束执行
  • 结果限制:每个查询最多1000行
  • 查询超时:30秒执行限制
  • 无动态SQL:所有在YAML中预定义的查询

发展

项目结构

StructuredDataMCP/
├── config/
│   └── queries/              # YAML query definitions
│       ├── users.yaml
│       ├── products.yaml
│       ├── orders.yaml
│       ├── reviews.yaml
│       ├── cart.yaml
│       └── analytics.yaml
├── src/structureddatamcp/
│   ├── models.py             # Pydantic models for YAML validation
│   ├── loader.py             # YAML query loader
│   ├── validator.py          # SQL validation
│   ├── executor.py           # Query execution engine
│   └── factory.py            # MCP tool factory
├── examples/
│   ├── schema_migration.sql  # Database schema
│   ├── sample_data.sql       # Sample data
│   └── sample.db             # SQLite database
├── main.py                   # MCP server entry point
└── README.md

运行测试

# Verify queries load correctly
source .venv/bin/activate
python main.py

# Should output:
# ✓ Loaded 19 query tools from .../config/queries

直接测试查询

# Test a query against the database
sqlite3 examples/sample.db "
SELECT
  COALESCE(u.username, '') as username,
  COALESCE(COUNT(o.order_id), 0) as order_count
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
GROUP BY u.user_id, u.username
ORDER BY order_count DESC;
"

Claude Desktop使用示例

配置后,您可以向Claude提出与您的工具相对应的自然语言问题:

用户:“显示用户alice的所有订单”

克劳德: *用途 get_user_orders 使用搜索工具查找alice的user_id,然后检索订单*

用户“最畅销的三大产品是什么?”

克劳德: *用途 get_popular_products 限制工具=3*

用户:“哪些用户购买了无线耳机?”

克劳德: *用途 get_users_by_product 工具(反向遍历)*

用户:“显示笔记本电脑的评论统计数据”

克劳德: *用途 get_product_review_stats 产品搜索工具*

扩展到您自己的数据库

  1. 替换数据库:
   cp your_database.db examples/sample.db
  1. 探索模式:
   sqlite3 examples/sample.db ".schema"
  1. 创建查询定义:

- 在中添加YAML文件 config/queries/ - 遵循现有查询中的模式 - 使用COALESCE实现零安全 - 为多记录结果添加分页

  1. 测试查询:
   # Test SQL directly first
   sqlite3 examples/sample.db "YOUR SQL HERE"
  1. 重新启动克劳德桌面

最佳实践

  1. 始终使用COALESCE:防止NULL值破坏JSON序列化
  2. 直接测试查询:在添加到YAML之前使用sqlite3 CLI
  3. 添加分页:多记录查询应支持限额/偏移
  4. 彻底记录:清晰的描述有助于克劳德选择合适的工具
  5. 使用约束:最小/最大值可防止滥用和错误
  6. 遵循命名约定:一致的命名提高了可发现性
  7. 从SELECT开始:根据设计,查询是只读的

故障排除

服务器未显示在Claude桌面中

  1. 检查配置文件语法(有效的JSON)
  2. 验证Python和main.py的绝对路径
  3. 检查克劳德桌面日志:

- macOS: ~/Library/Logs/Claude/ - 窗户: %APPDATA%\Claude\logs\

  1. 完全重新启动Claude Desktop(退出并重新启动)

查询不起作用

  1. 直接用sqlite3测试SQL
  2. 检查YAML语法(缩进、冒号)
  3. 验证所有可空字段上的COALESCE
  4. 检查参数名称是否与SQL匹配(:param_name)
  5. 查看服务器stderr输出是否存在验证错误

未找到数据库

确保路径 main.py 是绝对的还是相对于脚本位置的:

DB_PATH = Path(__file__).parent / "examples" / "sample.db"
QUERIES_DIR = Path(__file__).parent / "config" / "queries"

许可证

麻省理工学院

贡献

欢迎投稿!拜托:

  1. 遵循现有的YAML模式
  2. 添加全面的描述
  3. 在PR描述中包含示例查询
  4. 提交前使用Claude Desktop进行测试

致谢

建于 FastMCP -构建MCP服务器的最快方法。

工具与能力

工具数量

19

资源数量

0

提示词数量

0

能力标签

数据库查询Python本地部署无代码开发数据分析SQLite工具YAML配置

支持客户端

Claude DesktopClaude

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

用自然语言查库

不用手写 SQL,直接问数据,让模型组织查询语句。

数据巡检

定期拉指标、做对比,把异常项整理成一段说明。

打通业务数据

把数据库、数仓和接口接进同一个上下文,减少导出再上传。

选择建议

值得选的地方

  • 工具数量 19 个,一次接入能覆盖的操作比单点工具更全。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 已经适配 Claude Desktop、Claude,换客户端不用重新研究配置。

先想清楚的地方

  • stdio 方式要求本地装好 Python,换机器要重新装一遍。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在数据服务场景里让模型直接调用外部能力的人。
  • 已经在用 Claude Desktop 的用户,接入路径最短。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Structured Data MCP

MCP World · 本页

19stdio有1 个2026-05-17
Memory 9d25f64e

MCP World

9未说明未标注1 个2026-05-17
Prisma MCP Server

MCP World

0stdio有3 个2026-05-17
Astr Bot

MCP World

0stdio有1 个2026-05-17
Getzep MCP

MCP World

9stdio有1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Structured Data MCP 怎么安装?

公开资料给出的安装命令是 python -m venv .venv,运行环境为 Python。装完后按客户端要求写进 MCP 配置,重启客户端生效。

Structured Data MCP 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 Python;保存后完全退出客户端再打开,配置才会生效。

Structured Data MCP 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Structured Data MCP 需要 API Key 吗?

公开资料标注为无需认证,装好就能连;如果实际调用时报鉴权错误,按官方文档补上凭据。

Structured Data MCP 支持哪些客户端?

公开资料标注支持 Claude Desktop、Claude;其他客户端只要能配置 MCP Server,也能用同样的命令或地址接入。

来源信息

继续浏览同类 MCP