数据查询服务器

FileData MCP Server 是一个将CSV和Excel文件作为可查询的数据表暴露出来的服务器,支持多种数据查询工具和SQL操作。

  • by hedrickbt
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 hedrickbt/FileDataMcpServer

使用说明

FileData MCP服务器

A. FastMCP 该服务器将CSV和Excel文件作为可查询的MCP工具公开,旨在与OpenWebUI和其他MCP客户端配合使用。

特性

  • CSV支持 --每个文件都变成一个表(以文件名命名)
  • Excel支持 --每个工作表选项卡都成为自己的表(以选项卡命名)
  • 灵活的来源 --配置本地文件路径和/或HTTPS URL
  • 自动类型检测 --货币($1,234.56)和百分比(42%)立柱在负载时被清洁并铸造成数字
  • 5个MCP工具 --列出表、检查列、查询行、执行SQL、获取表摘要

MCP工具

工具 说明
get_tables() 列出所有可用的表名
get_columns(table_name) 表的列表列+数据类型
query_table(table_name, limit, offset) 将行作为JSON数组返回
execute_polars_sql(table_name, query, limit, offset) 使用Polars SQL引擎对表运行SQL查询
get_table_info(table_name) 行数、列统计数据、5行样本

快速开始

1.安装

python3 -m venv .venv
source .venv/bin/activate      # Windows: .venv\Scripts\activate
pip install -e .

2.配置

cp .env.example .env
# Edit .env and set FILEDATA_SOURCES

示例 .env:

FILEDATA_SOURCES=./data/sales.csv,./data/report.xlsx,https://example.com/data.csv
FILEDATA_TRANSPORT=stdio

3.跑步

# stdio (default — for local MCP clients)
python -m filedata.server

# SSE / HTTP (for OpenWebUI)
FILEDATA_TRANSPORT=sse FILEDATA_PORT=8000 python -m filedata.server

文件源规则

源类型 表命名
sales.csv 表名称: sales
report.xlsx (表: Q1) 表名: Q1
https://host.com/data.csv 表名称: data
https://host.com/report.xlsx (表: Jan) 表名: Jan

OpenWebUI设置

  1. 集 FILEDATA_TRANSPORT=sse 并选择一个端口(例如。 8000)
  2. 启动服务器: python -m filedata.server
  3. 在OpenWebUI中→ 设置→ MCP服务器,添加: http://localhost:8000/sse

发展

pip install -e ".[dev]"
pytest tests/ -v

测试

MCP检查器(浏览器UI)

npx @modelcontextprotocol/inspector .venv/bin/python -m filedata.server

或者连接到正在运行的SSE服务器:

npx @modelcontextprotocol/inspector http://localhost:8000/sse

mcptools(命令行界面)

确保 .env 有 FILEDATA_TRANSPORT=sse,然后启动服务器:

. .venv/bin/activate
python -m filedata.server

在另一个终端中:

brew tap f/mcptools
brew install mcp
mcp tools http://localhost:8000/sse
mcp call get_tables http://localhost:8000/sse
mcp call get_columns --params '{"table_name":"sales"}' http://localhost:8000/sse
mcp call get_table_info --params '{"table_name":"sales"}' http://localhost:8000/sse
mcp call query_table --params '{"table_name":"sales","limit":10,"offset":0}' http://localhost:8000/sse
mcp call execute_polars_sql --params '{"table_name":"sales","query":"SELECT MAX(Price) AS MaxPrice, MIN(Price) as MinPrice FROM sales","limit":50}' http://localhost:8000/sse
mcp call execute_polars_sql --params '{"table_name":"sales","query":"SELECT SUM(Quantity * Price) AS total FROM sales","limit":50}' http://localhost:8000/sse

卷曲(SSE传输)

SSE需要两个连接——一个用于保存流,一个用于发送消息。

端子1 --打开事件流:

curl -N http://localhost:8000/sse
# Server responds with:
# event: endpoint
# data: /messages?session_id=<uuid>

2号航站楼 --从上面向会话URL发送POST消息:

# Initialize
curl -X POST "http://localhost:8000/messages?session_id=<uuid>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"0.1"}}}'

# List tools
curl -X POST "http://localhost:8000/messages?session_id=<uuid>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

响应返回到终端1的事件流中,而不是POST响应体中。


支持格式

  • .csv
  • .xlsx / .xls / .xlsm

依赖项


灵感来源: 不再使用SQL——使用MCP构建基于AI的CSV分析代理

示例代码: mcp-csv分析仪