AMS360 MCP 服务器

AMS360 MCP 服务器是一个基于TypeScript实现的SOAP客户端,用于与Vertafore AMS360 WSAPI v3交互,提供客户搜索、策略获取等功能。

  • by Scottpedia0
  • TypeScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 Scottpedia0/ams360-mcp-server

使用说明

AMS360 MCP服务器

用于Vertfore AMS360 WSAPI v3的MCP服务器,用TypeScript实现 @modelcontextprotocol/sdk 以及用于AMS360 WCF端点的真正SOAP 1.1客户端。

它做什么

此服务器公开以下MCP工具:

  • search_clients(query)
  • get_client(clientId)
  • get_policies(clientId)
  • get_renewals(startDate, endDate)
  • get_activities(filter)

在引擎盖下,它使用公共AMS360 WSAPI v3合约:

  • Login 建立会话
  • CustomerGetById
  • CustomerGetByNumber
  • CustomerGetListByNamePrefix
  • PolicyGet
  • PolicyGetListByCustomerId
  • PolicyGetListByCustomerNumber
  • PolicyGetListByPolicyNumber
  • CustomerSuspenseGetListByCustomerId
  • CommonSuspenseGetListByEntityId
  • PersonalNoteGetList
  • LineOfBusinessGetByCode

WSAPI重要注意事项

公开的Vertfore AMS360 WSAPI v3文档目前描述了一个SOAP端点:

  • https://wsapi.ams360.com/v3/WSAPIService.svc

身份验证不是纯REST风格的身份验证。记录的流程是:

  1. 呼叫 Login 和 AgencyNo, LoginId, Password,并且可选 EmployeeCode.
  2. 阅读 WSAPISession 登录响应中的SOAP标头。
  3. 发送这个 WSAPISession 带有后续请求的标头。

此服务器遵循该流程,还支持将WSAPI置于额外HTTPS身份验证层后面的机构的可选HTTP基本身份验证。

公共文档的限制

当前公开的WSAPI v3表面没有完全公开其中两个请求的概念:

  • 文档显示 CustomerActivityInsert 和 CommonActivityInsert,但不是活动列表检索操作。
  • 这些文档不会发布全球机构范围内的续订日期范围查询。

因此:

  • get_activities 针对机构通常用于提醒的可检索WSAPI实体实现:客户暂停、常见暂停和个人笔记。
  • get_renewals 返回一个结构化的基于文档的限制消息,而不是在不存在完整续订提要时假装存在。

先决条件

  • Node.js 20+推荐
  • 在AMS360中创建的AMS360 WSAPI凭据
  • 您的代理编号

安装

npm install
npm run build

在开发过程中直接从源代码运行:

npm run dev

要运行已编译的服务器,请执行以下操作:

npm start

配置

设置这些环境变量:

export AMS360_AGENCY_NO="YOUR_AGENCY_NO"
export AMS360_USERNAME="YOUR_WSAPI_LOGIN_ID"
export AMS360_PASSWORD="YOUR_WSAPI_PASSWORD"
export AMS360_ENDPOINT_URL="https://wsapi.ams360.com/v3/WSAPIService.svc"

可选变量:

export AMS360_EMPLOYEE_CODE="ABC"
export AMS360_TIMEOUT_MS="30000"
export AMS360_POLICY_DETAIL_LIMIT="25"
export AMS360_DEBUG="false"

可选的HTTP基本身份验证,如果您的代理机构在WSAPI前端使用另一个身份验证层:

export AMS360_HTTP_AUTH_MODE="basic"
export AMS360_HTTP_USERNAME="basic-auth-user"
export AMS360_HTTP_PASSWORD="basic-auth-password"

此服务器支持的别名:

  • AMS360_AGENCY_URL 作为别名 AMS360_ENDPOINT_URL
  • AMS360_LOGIN_ID 作为别名 AMS360_USERNAME

克劳德桌面

将服务器添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "ams360": {
      "command": "node",
      "args": [
        "/absolute/path/to/ams360-mcp-server/dist/index.js"
      ],
      "env": {
        "AMS360_AGENCY_NO": "YOUR_AGENCY_NO",
        "AMS360_USERNAME": "YOUR_WSAPI_LOGIN_ID",
        "AMS360_PASSWORD": "YOUR_WSAPI_PASSWORD",
        "AMS360_ENDPOINT_URL": "https://wsapi.ams360.com/v3/WSAPIService.svc"
      }
    }
  }
}

如果你想让Claude Desktop从包目录启动它:

{
  "mcpServers": {
    "ams360": {
      "command": "npx",
      "args": [
        "tsx",
        "/absolute/path/to/ams360-mcp-server/src/index.ts"
      ],
      "env": {
        "AMS360_AGENCY_NO": "YOUR_AGENCY_NO",
        "AMS360_USERNAME": "YOUR_WSAPI_LOGIN_ID",
        "AMS360_PASSWORD": "YOUR_WSAPI_PASSWORD"
      }
    }
  }
}

克劳德代码

将相同的服务器定义添加到 .claude.json:

{
  "mcpServers": {
    "ams360": {
      "command": "node",
      "args": [
        "/absolute/path/to/ams360-mcp-server/dist/index.js"
      ],
      "env": {
        "AMS360_AGENCY_NO": "YOUR_AGENCY_NO",
        "AMS360_USERNAME": "YOUR_WSAPI_LOGIN_ID",
        "AMS360_PASSWORD": "YOUR_WSAPI_PASSWORD",
        "AMS360_ENDPOINT_URL": "https://wsapi.ams360.com/v3/WSAPIService.svc"
      }
    }
  }
}

工具行为

search_clients(query)

尽力搜索策略:

  • GUID-> CustomerGetById
  • 数字字符串-> CustomerGetByNumber
  • 文本-> CustomerGetListByNamePrefix
  • 策略查找字符串-> PolicyGetListByPolicyNumber,然后水合物匹配客户记录

get_client(clientId)

通过以下方式获取完整的客户记录:

  • 客户GUID,或
  • 客户编号

get_policies(clientId)

退货:

  • 所有匹配策略的策略摘要
  • 为高达 AMS360_POLICY_DETAIL_LIMIT 政策
  • 通过以下方式丰富业务线 LineOfBusinessGetByCode

重要提示:

  • 返回所有匹配策略的策略摘要
  • 满的 PolicyGet 只获取第一个细节 AMS360_POLICY_DETAIL_LIMIT 政策
  • 默认的详细信息限制为 25
  • 工具输出包括 detailHydrationTruncated 和 detailHydrationMessage 当细节集不完整时

get_activities(filter)

支持的筛选路由:

  • {"customerId":"<guid>"} -> CustomerSuspenseGetListByCustomerId
  • {"entityId":"<id>","entityType":<short>} -> CommonSuspenseGetListByEntityId
  • {"source":"personalNotes","dateFrom":"2026-01-01","dateTo":"2026-01-31"} -> PersonalNoteGetList

重要提示:

  • 当筛选器为空时,此工具不会默认为个人笔记
  • 要检索个人笔记,请设置 source 到 "personalNotes" 明确地

get_renewals(startDate, endDate)

返回一个结构化的限制响应,解释公共WSAPI v3文档没有公开真正的机构范围续订日期范围查询。这是作为正常的工具响应返回的,而不是运输/工具故障。

参考文献