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=stdio3.跑步
# 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设置
- 集
FILEDATA_TRANSPORT=sse并选择一个端口(例如。8000) - 启动服务器:
python -m filedata.server - 在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/ssemcptools(命令行界面)
确保 .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=2号航站楼 --从上面向会话URL发送POST消息:
# Initialize
curl -X POST "http://localhost:8000/messages?session_id=" \
-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=" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'响应返回到终端1的事件流中,而不是POST响应体中。
______________________________________________________________________
支持格式
.csv.xlsx/.xls/.xlsm
依赖项
- fastmcp --MCP服务器框架
- 熊猫 --文件加载(CSV+Excel)
- 极坐标 --SQL查询引擎
- 箭 --熊猫→ Polars转换后端
- openpyxl --Excel读/写引擎
- 请求: --HTTPS文件获取
- python dotenv —
.env支持
______________________________________________________________________
*灵感来源: 不再使用SQL——使用MCP构建基于AI的CSV分析代理*
*示例代码: mcp-csv分析仪*
