EEA地理网络MCP服务器
模型上下文协议(MCP)服务器,提供与欧洲环境局(EEA)地理网络目录API(地理网络4.4.9)交互的工具。
特性
该MCP服务器提供20个工具,用于与EEA地理网络目录进行交互:
搜索与发现
- 搜索记录 -使用完整的Elasticsearch查询支持搜索元数据记录
- 搜索_范围 -按地理边界框查找记录
- 获取记录 -通过UUID检索特定记录的详细元数据
- get_record_by_id -通过记录的内部数字ID检索记录
- 获取相关记录 -查找相关记录(父母、子女、服务、数据集)
数据导出和管理
- get_record_formaters -列出记录的可用导出格式
- export_record -以各种格式(XML、PDF等)导出元数据
- 复制记录 -复制现有元数据记录(需要身份验证)
记录编辑(需要身份验证)
- update_record -使用XPath更新任何字段(支持ISO 19139和ISO 19115-3)
- update_record_title -更新记录标题的简化工具(自动检测模式)
- add_record_tags -向记录添加标签/类别
- 删除记录标签 -从记录中删除标签/类别
资源/附件管理
- upload_file_to_rorecord -将文件从本地文件系统直接上传到元数据记录(需要身份验证)
- 获取附件 -列出元数据记录的所有附件/资源
- 删除附件 -从记录中删除特定附件(需要身份验证)
目录信息
- get_site_info -获取目录配置和站点信息
- 获取_资源 -列出目录来源和子门户
- list_groups -列出所有用户组
- 获取标签 -获取可用标签/类别
- get_regions -获取地理区域/范围
安装
- 安装依赖项:
npm install- 构建项目:
npm run build- (可选)配置环境变量:
# Create a .env file in the project root
PORT=3001
BASE_URL=https://galliwasp.eea.europa.eu/catalogue/srv/api
MAX_SEARCH_RESULTS=20
# Authentication for write operations (duplicate, update)
CATALOGUE_USERNAME=your_username
CATALOGUE_PASSWORD='your_password'
# Rate limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100注: 用于包含特殊字符的密码($, #等),将值括在单引号中。
用法
流式HTTP服务器(MCP传输)
服务器使用官方的MCP Streamable HTTP传输和服务器发送事件(SSE)。
启动服务器:
npm start服务器将在端口3001(或 PORT 环境变量)。
可用端点:
GET http://localhost:3001/health-健康检查端点GET http://localhost:3001/info-服务器信息POST http://localhost:3001/upload-将文件上传到购物篮(多部分/表单数据)GET http://localhost:3001/uploads/:filename-检索上传的文件POST http://localhost:3001/-MCP消息端点(标准JSON-RPC)GET http://localhost:3001/-MCP SSE流端点(用于服务器发起的消息)
测试服务器:
# Check if server is running
curl http://localhost:3001/health
# Should return: {"status":"ok","service":"eea-geonetwork-mcp"}
# Upload a file to the basket
curl -X POST http://localhost:3001/upload -F "file=@myfile.pdf"
# Returns: {"success":true,"file":{"url":"http://localhost:3001/uploads/myfile-123456789.pdf",...}}上传购物篮
该服务器包括一个内置的上传篮,用于临时文件存储。这允许您先上传文件,然后使用URL将它们附加到元数据记录。
Swagger UI(最简单的方法):
- 打开
http://localhost:3001/api-docs在浏览器中 - 展开“POST/上传”端点
- 点击“试用”
- 选择一个文件并单击“执行”
- 从响应中复制返回的URL
- 将此URL与
upload_resource_from_urlMCP工具
它是如何工作的:
- 通过上传文件
POST /upload端点(或使用Swagger UI) - 服务器将文件存储在
uploads/目录 - 服务器返回一个URL:
http://localhost:3001/uploads/filename - 使用此URL
upload_resource_from_url附加到元数据记录的工具
配置:
# Optional environment variables
UPLOAD_DIR=./uploads # Upload directory (default: ./uploads)
MAX_FILE_SIZE=104857600 # Max file size in bytes (default: 100MB)Swagger用户界面:
- 访问API交互式文档和文件上传界面:
http://localhost:3001/api-docs
使用克劳德桌面
添加到您的Claude Desktop配置文件中:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"eea-geonetwork": {
"command": "node",
"args": ["C:\\Users\\dubos\\_Projects\\EEA_sdi_mcp\\dist\\index.js"]
}
}
}查询示例
连接到Claude Desktop后,您可以提出以下问题:
- “在欧洲经济区目录中搜索有关空气质量的数据集”
- “查找欧洲边界框内的所有元数据记录”
- “获取有关记录UUID abc-123-def的详细信息”
- “将此元数据记录导出为XML”
- “目录中有哪些地理区域?”
- “显示与此父记录相关的所有数据集”
API基本URL
服务器连接到: https://galliwasp.eea.europa.eu/catalogue/srv/api (沙盒环境)
发展
命令
- 构建:
npm run build-编译TypeScript以进行dist/ - 观看模式:
npm run dev-在监视模式下编译TypeScript(更改时自动重新编译) - 开始:
npm start-运行已编译的服务器
开发流程
对于主动开发,请在单独的终端中运行两个命令:
端子1 -在监视模式下编译TypeScript:
npm run dev2号航站楼 -启动服务器:
npm start这样,当您进行更改时,TypeScript会自动重新编译,您可以重新启动服务器以获取新的更改。
建筑
服务器使用官方MCP SDK和Streamable HTTP传输(无状态模式):
- 快递服务器 使用CORS支持处理HTTP端点
- MCP服务器 通过Streamable HTTP/SSE处理工具请求
- Axios客户端 与欧洲经济区地理网络API通信(30秒超时)
- 模块化设计 使用单独的文件:
- src/index.ts -服务器设置和路由 - src/tools.ts -工具定义(20个工具) - src/handlers.ts -工具实现处理程序 - src/types.ts -TypeScript接口
工具参考
搜索记录
在目录中搜索元数据记录。
参数:
query(字符串):搜索文本from(数字):起始位置(默认值:0)size(number):结果数(默认值:10,最大值:100)bucket(string):按分面桶过滤sortBy(string):排序字段sortOrder(字符串):“asc”或“desc”
获取记录
获取特定记录的详细元数据。
参数:
uuid(字符串,必填):记录UUID或IDapproved(boolean):仅批准的版本(默认值:true)
搜索_范围
按地理范围搜索记录。
参数:
minx(数字,必填):最小经度(西)miny(数字,必填):最小纬度(南)maxx(数字,必填):最大经度(东)maxy(数字,必填):最大纬度(北)relation(字符串):空间关系-“相交”、“在”或“包含”(默认值:“相交”)
export_record
以特定格式导出元数据记录。
参数:
uuid(字符串,必填):记录UUIDformatter(字符串,必填):格式标识符(例如,“xml”、“pdf”、“full_view”)
使用 get_record_formatters 首先查看记录的可用格式。
复制记录
使用新的UUID复制现有元数据记录。 需要身份验证。
参数:
metadataUuid(string,必填):要复制的记录的UUIDgroup(字符串,可选):重复记录的目标组isChildOfSource(布尔值,可选):将源记录设置为新记录的父记录(默认值:false)targetUuid(字符串,可选):用于重复记录的特定UUID(如果未提供,则自动生成)hasCategoryOfSource(布尔值,可选):从源记录复制类别(默认值:true)
get_record_by_id
通过元数据记录的内部数字ID检索元数据记录。这对于在重复操作后获取UUID很有用。
参数:
id(number,必填):记录的内部数字ID
update_record
使用XPath更新元数据记录字段。 需要身份验证。
参数:
uuid(string,必填):要更新的记录的UUIDxpath(字符串,必填):XPath到要更新的元素value(字符串,必填):新值(用于简单替换的文本,或完整的XML元素)operation(字符串,可选):操作类型-“替换”(默认)、“添加”或“删除”updateDateStamp(布尔值,可选):更新记录的时间戳(默认值:true)
通用XPath:
- ISO 19139标题:
gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString - ISO 19115-3标题:
mdb:identificationInfo/*/mri:citation/cit:CI_Citation/cit:title/gco:CharacterString
update_record_title
更新记录标题的简化工具。自动检测模式(ISO 19139或ISO 19115-3)并使用正确的XPath。 需要身份验证。
参数:
uuid(string,必填):要更新的记录的UUIDtitle(string,必填):记录的新标题
add_record_tags
向元数据记录添加标签(类别)。 需要身份验证。
参数:
uuid(字符串,必填):记录的UUIDtags(数字数组,必填):要添加的标签ID数组
使用 get_tags 首先查找可用的标签ID。
删除记录标签
从元数据记录中删除标签(类别)。 需要身份验证。
参数:
uuid(字符串,必填):记录的UUIDtags(数字数组,必填):要删除的标签ID数组
upload_file_to_rorecord
将文件从本地文件系统直接上传到元数据记录作为附件。该文件以二进制数据的形式上传到GeoNetwork。 需要身份验证。
参数:
metadataUuid(string,必填):要附加文件的元数据记录的UUIDfilePath(string,必填):本地文件的绝对路径(例如。,C:\Users\name\document.pdf或/home/user/document.pdf)visibility(字符串,可选):共享策略-“PUBLIC”或“PRIVATE”(默认值:PUBLIC)approved(布尔值,可选):是否使用批准的版本(默认值:false)
例子:
metadataUuid: "43d7c186-2187-4bcd-8843-41e575a5ef56"
filePath: "C:\\Documents\\myfile.pdf"注: 此工具直接将文件上传到GeoNetwork。该文件必须在运行MCP服务器的计算机上可访问。
获取附件
列出元数据记录的所有附件/资源。
参数:
metadataUuid(string,必填):元数据记录的UUIDsort(字符串,可选):按“类型”或“名称”对结果排序(默认值:名称)approved(布尔值,可选):是否使用批准的版本(默认值:true)filter(字符串,可选):附件名称的过滤模式(默认值:\*)
退货: 附件对象数组,包含文件名、类型、URL、大小等详细信息。
删除附件
从元数据记录中删除特定附件。 需要身份验证。
参数:
metadataUuid(string,必填):元数据记录的UUIDresourceId(string,必填):要删除的资源的ID/文件名approved(布尔值,可选):是否使用批准的版本(默认值:false)
注: 使用 get_attachments 首先找到要删除的附件的确切resourceId。
许可证
麻省理工学院
