希腊保险中介搜索服务

一个生产就绪的MCP服务器,用于通过EOA公共注册表搜索希腊保险中介。

  • by conetgr
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 conetgr/eoa-mcp-server

使用说明

EOA MCP服务器

生产就绪的MCP(模型上下文协议)服务器,用于通过EOA公共注册表(EOA.conet.gr)搜索希腊保险中介机构。

设置

先决条件

  • Node.js 18+
  • EOA API证书(AUSER/APSWORD)

安装

cd mcp_server
npm install

环境变量

变量 必填 默认 描述
EOA_AUSER 是 - EOA API用户名(标题AUSER)
EOA_APASSWORD 是 - EOA API密码(标题APASSWORD)
EOA_BASE_URL 没有 https://eoa.conet.gr EOA API基本URL(方案+主机+端口,无尾部斜线)。 默认为生产;对于本地Django开发服务器集,例如。 http://127.0.0.1:8000 因此MCP调用您的实例(需要使用本地API更改,如新的过滤器)。
PORT 没有 8080 HTTP服务器端口
CACHE_TTL_SECONDS 没有 600 相同请求的缓存TTL(10分钟)

跑

发展 (带手表):

npm run dev

生产:

npm run build
npm start

端点

方法 路径 描述
得到 /health 健康检查(退货 { status: "ok" })
职位 /mcp MCP JSON-RPC消息(工具、初始化等)
得到 /mcp 返回405(使用POST)

MCP工具

所有工具返回JSON results,可选 total, source_note,以及 errors.

1. search_intermediaries

按查询和筛选器进行常规搜索。

输入:

参数 类型 默认值 说明
query string - 按名称搜索(部分匹配)
vat string - 增值税号(9位数字)
gemi string - GEMI注册号
keee_categories string[] - KEEE类别值
license_status “活动” “过期” “无信息”
main_activity “任意” “主” “次”
legaltype_ids string[] - 合法类型ID(请参见 list_legal_types)
page number 1 页码
page_size number 20 页面大小(最大50)
order_by string[] - 字段排序: vatnumber, gemiTradeName, keeeLicenceExpiration, gemiIncorporationDate, lastUpdate (前缀 - 下降)
gemi_incorporation_date_from string - GEMI成立日期的下限(YYYY-MM-DD);单独使用或与 gemi_incorporation_date_to
gemi_incorporation_date_to string - 包含GEMI成立日期的上限(YYYY-MM-DD);单独使用或与 gemi_incorporation_date_from
include_total boolean false 包括总计数

这些日期参数被传递给EOA检索API作为 filter.gemiIncorporationDateFrom 和 filter.gemiIncorporationDateTo (包括日历日期)。当应用绑定时,不包括没有GEMI注册日期的配置文件。

例子:

{
  "query": "ΠΛΥΤΑΡΙΑΣ",
  "license_status": "active",
  "page": 1,
  "page_size": 20,
  "include_total": true
}

2. get_intermediary_by_vat

通过增值税号码获得单个中介。

输入:

参数 类型 说明
vat string 希腊增值税号码(9位数字)

例子:

{
  "vat": "998368964"
}

3. get_intermediary_by_gemi

通过GEMI注册号获得单个中介。

输入:

参数 类型 说明
gemi string GEMI(Γ.ΜΗ.)注册号

例子:

{
  "gemi": "69583903000"
}

4. search_intermediaries_in_bbox

在地理边界框内搜索。

输入:

参数 类型 说明
latitude_from number 最小纬度
latitude_to number 最大纬度
longitude_from number 最小经度
longitude_to number 最大经度
query string 可选名称筛选器
keee_categories string[] 可选
license_status “活动” “过期”
main_activity “任意” “主”
legaltype_ids string[] 可选
gemi_incorporation_date_from string 可选;包容的 YYYY-MM-DD GEMI成立日期下限
gemi_incorporation_date_to string 可选;包容的 YYYY-MM-DD GEMI成立日期的上限
page number 默认值1
page_size number 默认值为20,最大值为50
order_by string[] 可选
include_total boolean 默认值为false

例子:

{
  "latitude_from": 37.96,
  "latitude_to": 38.00,
  "longitude_from": 23.71,
  "longitude_to": 23.75,
  "include_total": true
}

5. list_legal_types

返回合法类型ID到希腊语描述的映射。无输入。

示例响应:

{
  "results": {
    "1": "ΑΕ",
    "2": "ΟΕ",
    "4": "ΕΕ",
    ...
  },
  "source_note": "EOA public registry aggregation; check lastUpdate for freshness.",
  "errors": []
}

输出格式

所有搜索工具返回:

{
  "results": [
    {
      "profileType": "P|G",
      "vatnumber": ".........",
      "geminumber": "...",
      "agentName": "...",
      "gemiTradeName": "...",
      "gemiIncorporationDate": "YYYY-MM-DD",
      "keeeRegistrationClass": "...",
      "keeeLicenceExpiration": "YYYY-MM-DD",
      "gemiBusinessAddress": "...",
      "gemiPhoneNumber": "...",
      "latitude": 0,
      "longitude": 0,
      "lastUpdate": "ISO-8601"
    }
  ],
  "total": 123,
  "source_note": "EOA public registry aggregation; check lastUpdate for freshness.",
  "errors": []
}
  • total 仅在以下情况下存在 include_total: true.
  • errors 包含任何上游或验证错误。

非功能性特征

  • 速率限制:每个IP每分钟60个请求
  • 缓存:相同请求的10分钟TTL(在内存中,可为Redis交换)
  • 输入验证:增值税9位数,page_size≤50,page≥1,bbox边界,可选GEMI注册日期范围(YYYY-MM-DD,从≤到)
  • 安全:头盔,没有敏感的头部日志记录,v1中没有base64图像