数据工程MCP协作者(或助手)
概述
轻量级数据工程副驾驶:Chainlit UI -> FastAPI网关(JWT)-> 两个MCP服务器:
- 内部定制MCP服务器(回显功能+旧版AWS演示工具)
- 官方AWS数据处理MCP服务器(aws-dp-server)通过/awsdp/\*端点暴露
建筑学
Browser -> Chainlit -> FastAPI Gateway -> (mcp-server) echo & demo tools
-> (aws-dp-server) official AWS Data Processing toolsLocalStack 已被移除;现在,如果您需要,您可以指向真实的 AWS 凭据或外部的其他模拟器。
组件
mcp_server(自定义)
工具:
echo(message: str)(稳定演示)- 传统的自定义AWS终端节点(s3/glue/athena)——将被弃用,以支持/awsdp/\*
aws-dp-server(官方)
当前代理的端点(JWT 保护):
GET /awsdp/s3/buckets列出 S3 存储桶GET /awsdp/glue/databases-> 列出胶水数据库
(未来将类似地扩展到对象、表和Athena查询中。)
FastAPI网关
- 认证:
/auth/token,/auth/token_json - Echo 代理:
/echo - 自定义传统AWS代理:
/aws/...(待弃用) - 官方AWS数据处理代理:
/awsdp/... - 健康:
/health
\chainlit_app\ 可以翻译为“Chainlit 应用”或“基于 Chainlit 的应用”,具体取决于上下文和该术语在特定场景中的使用方式。这里,“chainlit”可能是一个特定框架、库或平台的名称,而“app”则通常指的是应用程序。因此,整个术语可以理解为使用或基于 Chainlit 技术或平台构建的应用程序。
- 发送聊天文本(或之后)
echo:(前缀)到/echo。 - 未来:动态工具发现及/awsdp交互。
环境变量(.env)
最小示例(建议使用基于配置文件的凭据):
MCP_SERVER_HOST=0.0.0.0
MCP_SERVER_PORT=8080
MCP_SERVER_URL=http://mcp-server:8080
GATEWAY_HOST=0.0.0.0
GATEWAY_PORT=8000
JWT_SECRET=changeme-super-secret
JWT_ALGORITHM=HS256
JWT_EXPIRE_MINUTES=120
CHAINLIT_GATEWAY_URL=http://fastapi-gateway:8000
CHAINLIT_API_TOKEN=dev-token
CHAINLIT_USERNAME=demo
CHAINLIT_PASSWORD=demo
AWS_REGION=us-east-1
AWS_PROFILE=default
# Optional: explicit keys (NOT needed when mounting ~/.aws). Uncomment if required:
# AWS_ACCESS_KEY_ID=your-key
# AWS_SECRET_ACCESS_KEY=your-secret
ATHENA_OUTPUT=s3://aws-athena-query-results-
ATHENA_POLL_SECONDS=1.0
ATHENA_TIMEOUT_SECONDS=25
ATHENA_PAGE_ROWS_LIMIT=50
PYTHONUNBUFFERED=1凭证解析顺序(boto3):环境变量 > 共享凭证/配置文件(~/.aws)> IAM 角色。使用 AWS_PROFILE 并结合 compose 卷挂载($HOME/.aws:/root/.aws:ro) 保密以避免(外界的) .env。
主机凭证挂载
该compose文件挂载了您的主机 ~/.aws 装入容器中 /root/.aws 只读:
volumes:
- ${HOME}/.aws:/root/.aws:ro如果你使用了一个非默认的配置文件设置 AWS_PROFILE=your-profile 在 .env。
安全提示:确保 ~/.aws/credentials 具有正确的权限(chmod 600),并且从不将凭据提交到仓库中。
跑
cp .env.example .env
# fill real AWS creds (read-only acceptable for list operations)
docker compose up --build服务:
- 网关地址:http://localhost:8000(文档位于/docs)
- MCP 自定义:http://localhost:8080(内部回声工具;通常不对外暴露)
- Chainlit 用户界面:http://localhost:8501
认证与基本调用
获取令牌:
curl -s -X POST http://localhost:8000/auth/token_json \
-H 'Content-Type: application/json' \
-d '{"username":"demo","password":"demo"}' | jq存储令牌并调用回声:
TOKEN=... # access_token
curl -s -X POST http://localhost:8000/echo \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"message":"Hello Copilot"}' | jq官方AWS数据处理(aws-dp-server)示例:
# List buckets
curl -s -H "Authorization: Bearer $TOKEN" http://localhost:8000/awsdp/s3/buckets | jq
# List Glue databases
curl -s -H "Authorization: Bearer $TOKEN" http://localhost:8000/awsdp/glue/databases | jq遗留自定义终端节点(即将弃用):
curl -s -H "Authorization: Bearer $TOKEN" http://localhost:8000/aws/s3/buckets | jqMakefile(快捷方式)
快速入门:
make quickstart关键目标:
make env-copy # Create .env from example
make build # Build images
make up # Start stack
make down # Stop stack
make restart # Recreate stack
make ps # List containers
make logs-fastapi-gateway # Tail gateway logs
make token # Issue JWT
make echo MESSAGE='Hi' # Echo via gateway
make awsdp-buckets # /awsdp/s3/buckets
make awsdp-glue-databases # /awsdp/glue/databases
make health # Health checks
make smoke # Smoke test
make gen-jwt-secret # Rotate JWT secret
make clean # Remove token file
make prune # Docker prune按服务划分: up-, stop-, restart-, logs-, shell- for mcp-server, aws-dp-server, fastapi-gateway, chainlit。
故障排除
- 401 /echo -> (可翻译为)401 /echo(回声)->
make token - 网关不可用 ->
make logs-fastapi-gateway - 空的
.token-> 验证凭据(用户名/密码:demo/demo) - AWS 错误 -> 确认 AWS 凭据和区域
- Athena 遗留错误 -> 确保输出存储桶存在(或移除遗留工具的使用)
弃用通知
这个(或“该”) /aws/* 端点被……所取代 /awsdp/* (官方服务器)。计划在未来版本中迁移并移除旧版终端。
未来的扩展/延伸
- 扩展/awsdp的覆盖范围(对象、表、Athena查询)
- 工具注册表 + 动态 Chainlit 选择
- 统一错误模型与结构化日志记录
- 可选择性移除旧版自定义AWS终端节点
