候鸟观测服务
用于查询指定地理坐标点附近一定范围内的候鸟观测记录。调用此工具前,必须从用户的提问中解析出两个必需的浮点数参数:纬度(lat)和经度(lon)。同时可以接受两个可选的整数参数:查询半径(radius km,默认10)和回湖大数(days ago,默认30).
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"bird_service": {
"args": [
"main:app",
"--host",
"0.0.0.0",
"--port",
"8080"
],
"command": "uvicorn"
}
}
}
该服务需要配置环境变量:DB_HOST、DB_NAME、DB_PASSWORD、DB_PORT、DB_USER
服务介绍
my-bird-tool
介绍
这是一个为智能体(Agent)设计的、可部署在魔搭(ModelScope)平台的候鸟观测记录查询工具。
该工具以后端API服务的形式存在,能够接收指定的地理坐标(经纬度)、查询半径和时间范围,并连接到云端地理空间数据库(PostgreSQL + PostGIS),执行高效的实时空间查询。
最终,它可以被任何支持调用外部API的智能体平台(如本项目中设定的GEOGPT)集成和使用,赋予智能体强大的、与地理信息交互的能力。
软件架构
本项目采用了一个稳定、解耦的云端服务架构,主要由三个部分组成:
智能体调用层 (GEOGPT): 用户与智能体交互的前端平台。智能体(LLM)负责理解用户意图,并决定何时调用本工具。
服务托管与部署层 (魔搭 ModelScope): 负责从代码仓库拉取本项目代码,管理环境变量,并以“MCP Server”的形式在云端运行和托管我们的Python FastAPI服务。
数据与持久化层 (阿里云 Alibaba Cloud): 运行在云服务器ECS上的PostgreSQL数据库,并启用了PostGIS扩展,负责存储和高效查询所有候鸟的地理空间数据。
数据流转示意图:
mermaid
graph LR
A[用户] --> B[GEOGPT 平台];
B -- 1. 调用工具 --> C[魔搭 MCP Server URL];
C -- 2. 转发请求 --> D[运行在魔搭云端的FastAPI服务];
D -- 3. 查询数据库 --> E[阿里云ECS上的PostGIS数据库];
E -- 4. 返回数据 --> D;
D -- 5. 返回JSON --> C;
C -- 6. 返回结果 --> B;
B -- 7. 生成自然语言回答 --> A;
安装教程
部署本工具需要按以下顺序完成三大模块的配置。
配置云数据库 (阿里云ECS)
创建一台新的ECS实例,操作系统镜像选择 Ubuntu Server 22.04 LTS 64位,并确保分配了公网IP。
通过ECS Workbench或SSH登录服务器,运行 sudo apt update && sudo apt install -y postgresql postgresql-contrib postgis 安装所有必需的数据库软件。
修改PostgreSQL的两个配置文件 (postgresql.conf 和 pg_hba.conf) 以允许远程连接。
创建名为 bird_db 的数据库和名为 bird_admin 的用户,并为新数据库启用PostGIS扩展 (CREATE EXTENSION postgis;)。
在ECS的安全组中,添加入方向规则,允许所有IP (0.0.0.0/0) 对TCP协议的 5432 端口的访问。
准备代码仓库 (Gitee)
在本地创建一个项目文件夹,包含 main.py, database.py, requirements.txt, .gitignore 四个核心文件。
在Gitee上创建一个公开的仓库。
将本地的四个文件上传到Gitee仓库中。
部署到魔搭平台
登录魔搭平台,进入“创空间”,点击“创建MCP Server”。
来源地址填写您Gitee仓库的HTTPS地址。
环境变量中配置好5个数据库连接变量 (DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME)。
服务配置中填入正确的JSON启动命令,以uvicorn启动main:app。
点击部署,等待服务启动成功。
使用说明
获取服务URL
在魔搭平台的服务管理页面,复制上一步部署成功的MCP Server的官方访问URL。
在GEOGPT中配置工具
登录GEOGPT平台,进入“添加工具”界面。
工具类型选择“其他”(或最通用的API类型)。
在URL字段中,粘贴从魔搭获取的URL,并在结尾加上API路径 /query-nearby-birds/。
在描述字段中,填入为LLM优化过的详细功能描述,清晰说明工具的用途和必需参数(lat, lon)。
与智能体交互
保存工具后,即可在对话中向智能体发出自然语言指令。
示例问题: “帮我查一下,东经116.02度,北纬29.17度附近20公里内,最近一年都有什么鸟被观测到?”
参与贡献
Fork 本仓库
新建 Feat_xxx 分支
提交代码
新建 Pull Request