mcpField
I
IT Glue

IT Glue

本地服务
github.com记忆与知识56 周前更新

关于 IT Glue

面向 MSP 的 IT Glue MCP 服务,让 AI 助手读取和安全修改文档与灵活资产。提供向量语义搜索,并以角色权限和自带 API 密钥控制访问。

主要功能

  1. 01文档与章节的读写管理
  2. 02灵活资产与附件管理
  3. 03文档图片上传与处理
  4. 04向量语义搜索及索引刷新
  5. 05角色权限与自带密钥

适用场景

  1. 01查找与问题相关的运维手册
  2. 02为 IT Glue 文档创建或更新内容
  3. 03按用户角色限制可用工具
  4. 04部署共享服务并维护搜索索引

MCP 相关

向 MCP 客户端提供 IT Glue 文档、章节、灵活资产、附件和语义搜索工具。支持 stdio 与可流式 HTTP 传输,并可通过令牌和客户端自带 API 密钥控制会话权限。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"selic-mcp-itglue": {
"command": "npx",
"args": [
"-y",
"mcp-itglue"
],
"env": {
"ITGLUE_API_KEY": "<ITGLUE_API_KEY>",
"ITGLUE_REGION": "<ITGLUE_REGION>",
"ITGLUE_BASE_URL": "<ITGLUE_BASE_URL>",
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"AZURE_OPENAI_API_KEY": "<AZURE_OPENAI_API_KEY>",
"AZURE_OPENAI_ENDPOINT": "<AZURE_OPENAI_ENDPOINT>",
"EMBEDDING_MODEL": "<EMBEDDING_MODEL>",
"ITGLUE_ADVANCED_TOOLSET": "<ITGLUE_ADVANCED_TOOLSET>",
"VECTOR_INDEX_PATH": "<VECTOR_INDEX_PATH>"
}
}
}
}
启动命令npx -y mcp-itglue
需要配置的环境变量
ITGLUE_API_KEY密钥IT Glue API key (Account → Settings → API Keys)
ITGLUE_REGIONIT Glue region: us, eu, or au
ITGLUE_BASE_URLFull API base URL (overrides ITGLUE_REGION)
OPENAI_API_KEY密钥OpenAI API key — enables semantic vector search tools
AZURE_OPENAI_API_KEY密钥Azure OpenAI API key — enables vector search via Azure (requires AZURE_OPENAI_ENDPOINT)
AZURE_OPENAI_ENDPOINTAzure OpenAI endpoint URL
EMBEDDING_MODELEmbedding model or Azure deployment name
ITGLUE_ADVANCED_TOOLSETtrue/1 registers the advanced toolset (itglue_get, itglue_find_endpoint) — an opt-in read-only escape hatch; password resources stay blocked
VECTOR_INDEX_PATHPath of the persisted vector index file

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-itglue0.4.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-itglue

npm version license: MIT

一个适用于 IT Glue API 的 MCP(Model Context Protocol)服务,专为希望让 AI 助手读取并安全写入文档的 MSP 打造。

  • 文档和章节 — 列出、读取、创建、更新、发布、删除
  • 灵活资产 — 浏览资产类型及其字段,列出、读取、创建、更新、删除资产
  • 文档中的图片 — 通过 base64、URL 或本地路径将图片上传到文档中(内嵌到 Text/Step 章节,或上传到 Gallery),并使用返回的 <img src> 嵌入;获取和删除文档图片
  • 附件 — 将任意文件附加到记录的 Attachments 面板(文档、灵活资产、配置等);列出和删除附件
  • 语义向量搜索 — 即使措辞不匹配,搜索“如何移除备份 Agent”也能找到 Veeam 退役操作手册(使用 OpenAI 或 Azure OpenAI 嵌入、本地 JSON 索引)
  • 基于角色的访问控制 — 查看者 / 编辑者 / 管理员持有者令牌决定每个会话能够看到哪些工具
  • 使用自有密钥 — 客户端可在每个会话中提供自己的 IT Glue API 密钥,因此会应用 IT Glue 自身的权限
  • 索引新鲜度 — IT Glue webhook、写入后自动刷新,以及手动刷新端点
  • 传输方式 — 本地使用 stdio,共享部署使用可流式 HTTP;附带 Docker 镜像

安装

你需要一个 IT Glue API 密钥(IT Glue → Account → Settings → API Keys)。非美国地区的账户请将 ITGLUE_REGION 设为 eu 或 au。

npx(推荐)

Claude Desktop(claude_desktop_config.json)或 Claude Code(.mcp.json):

{
  "mcpServers": {
    "itglue": {
      "command": "npx",
      "args": ["-y", "mcp-itglue"],
      "env": { "ITGLUE_API_KEY": "ITG.xxxx" }
    }
  }
}

Claude Code 单行命令:

claude mcp add itglue --env ITGLUE_API_KEY=ITG.xxxx -- npx -y mcp-itglue

Claude Desktop 用户也可以从最新版本获取 mcp-itglue.mcpb — 用 Claude Desktop 打开,并在提示时填写 API 密钥。

stdio 始终以完整工具集运行 — 这是一种本地单用户传输方式,使用你自己的密钥。

Docker

容器镜像默认使用 HTTP 传输(适用于共享部署):

docker run --rm -p 3000:3000 \
  -e ITGLUE_API_KEY=ITG.xxxx \
  ghcr.io/mspstack/mcp-itglue

在 Docker 下本地使用 stdio:

{
  "mcpServers": {
    "itglue": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "ITGLUE_API_KEY", "ghcr.io/mspstack/mcp-itglue", "--transport", "stdio"],
      "env": { "ITGLUE_API_KEY": "ITG.xxxx" }
    }
  }
}
从源代码构建
git clone https://github.com/mspstack/mcp-itglue.git && cd mcp-itglue
npm install && npm run build
ITGLUE_API_KEY=ITG.xxxx node dist/index.js

HTTP 部署

ITGLUE_API_KEY=ITG.xxxx \
MCP_TOKENS_VIEWER="alice:$(openssl rand -hex 32)" \
MCP_TOKENS_EDITOR="automation:$(openssl rand -hex 32)" \
MCP_TOKENS_ADMIN="ops:$(openssl rand -hex 32)" \
npx -y mcp-itglue --transport http --port 3000

或使用 Docker:

docker run --rm -p 3000:3000 \
  -e ITGLUE_API_KEY -e MCP_TOKENS_VIEWER -e MCP_TOKENS_EDITOR -e MCP_TOKENS_ADMIN \
  ghcr.io/mspstack/mcp-itglue

端点:

路由用途
POST/GET/DELETE /mcpMCP 可流式 HTTP 端点
GET /health存活探针
POST /webhook/itglueIT Glue webhook → 增量索引更新
POST /index/refresh手动刷新索引(共享密钥或管理员令牌)
PUT /upload/:id暂存文件上传槽位(内存后端;使用与 /mcp 相同的身份验证)

会话保存在内存中 — 请在负载均衡器后运行单个实例(或启用粘性会话)。

访问控制

角色令牌

三个环境变量存放以逗号分隔的 label:token 列表:

MCP_TOKENS_VIEWER="alice:tokA,bob:tokB"   # read-only tools
MCP_TOKENS_EDITOR="hatz:tokC"             # + create/update/publish, delete section
MCP_TOKENS_ADMIN="ops:tokD"               # + delete documents / flexible assets

客户端通过 Authorization: Bearer <token> 进行身份验证。标签会显示在审计日志中([rbac] session … for alice (viewer)),便于你撤销某个人的令牌,而无需轮换所有人的令牌。

角色无权使用的工具不会为该会话注册 — 查看者甚至不会在 tools/list 中看到 itglue_create_document — 并且运行时保护机制会在每次调用时重新检查角色,以增加纵深防御。会话 ID 不会携带权限:每个请求都会重新进行身份验证,并且在现有会话中使用不同主体进行身份验证会返回 403。

如果未配置令牌,服务将以开发模式运行:所有请求均获得管理员访问权限,并在启动时发出醒目的警告。请勿在生产环境中这样做。

携带自己的 IT Glue 密钥(BYOK)

客户端可以在 initialize 请求的 x-itglue-api-key 标头中发送自己的 IT Glue API 密钥。随后,该会话会使用此密钥与 IT Glue 通信,并获得完整的工具集——IT Glue 自身的密钥权限即为实际访问控制。CLIENT_ITGLUE_KEYS 控制此策略:

值行为
with-token(默认)允许 BYOK,但仍要求有效的 bearer token——保护您的服务免于成为开放代理
open仅凭 IT Glue 密钥即可进行身份验证(适用于受信任的网络/本地使用)
disabled拒绝此标头;仅使用服务级密钥

启用 BYOK 后,服务级 ITGLUE_API_KEY 变为可选项:未提供客户端密钥的会话会被拒绝,并返回明确的错误。客户端密钥绝不会被记录;会话会绑定到密钥的 SHA-256 哈希,并以 byok:<hash-prefix> 作为审计标签。

工具

工具等级
itglue_list_organizations, itglue_get_organization读取
itglue_list_documents, itglue_get_document读取
itglue_list_document_folders读取
itglue_list_document_sections, itglue_get_document_section读取
itglue_list_flexible_asset_types, itglue_get_flexible_asset_type读取
itglue_list_flexible_assets, itglue_get_flexible_asset读取
itglue_get_document_image读取
itglue_list_attachments读取
itglue_vector_search, itglue_vector_index_status读取
itglue_create_document, itglue_update_document, itglue_publish_document写入
itglue_create_document_section, itglue_update_document_section写入
itglue_delete_document_section †写入
itglue_create_document_image写入
itglue_delete_document_image †写入
itglue_request_upload(HTTP,UPLOAD_STAGING ≠ off 时)写入
itglue_create_flexible_asset, itglue_update_flexible_asset写入
itglue_create_attachment写入
itglue_build_vector_index写入
itglue_delete_documents破坏性
itglue_delete_flexible_asset破坏性
itglue_delete_attachment破坏性
itglue_find_endpoint, itglue_get ‡读取

查看者 = 读取。编辑者 = 读取 + 写入。管理员 = 全部权限。 † 永久删除,但属于编辑者级别:编辑者需要这些工具来重组文档,并且已经可以通过更新来清空章节内容(或从中删除 <img>)。

文档中的图片与附件

IT Glue 有两种互不相关的上传方式。附件(itglue_create_attachment)会出现在记录的「附件」侧边栏中,不会显示在文档正文里。若要在文档内部显示图片,请使用 itglue_create_document_image:

  1. 使用 document_id 上传(内嵌),或使用 document_id + gallery_id 上传(其中 gallery_id 是 Gallery/Step 章节的 document_gallery_id)。
  2. 对于内嵌图片,将返回的 inline_resource_url 原样放入章节 HTML:<img src="/6255696/docs/17772862/images/27211966">——或者传入 append_to_section_id,由工具将其追加到现有的 Text/Step 章节中。

IT Glue 会从章节内容中剥除 data: URI 和自身的 S3 URL;只有这些相对路径(以及公开的 https:// 链接)会保留。

将文件从客户端传到服务端(暂存上传)

工具参数会经过模型,因此 content_base64 只适用于极小的文件——一张截图就有数 MB 的 Base64 数据,模型必须逐个 token 地复现(而 IT Glue 会因结果被截断而返回 NotIdentifiedByImageMagickError)。因此,HTTP 模式下服务端提供暂存上传:

  1. 模型调用 itglue_request_upload(file_name 可选),并获取 upload_id、URL 和可直接运行的 curl 命令。
  2. 客户端从 shell 将文件 PUT 到该 URL。
  3. 模型使用 upload_id 调用 itglue_create_document_image 或 itglue_create_attachment。

上传槽位有效期为 15 分钟,与发起请求的主体(令牌标签 / BYOK 密钥)绑定,且只能使用一次。可通过 UPLOAD_STAGING 选择两种后端:

模式PUT 请求的目标适用场景
memory(HTTP 模式下的默认值)此服务的 PUT /upload/:id,使用与 /mcp 相同的 Authorization / x-itglue-api-key 请求头。设置 PUBLIC_BASE_URL,使 URL 可访问。客户端可以直接访问该服务。
azure-blobAzure Blob Storage 上的短时效 SAS URL;服务端随后使用自身凭据下载 blob 并将其删除。服务端位于网关之后,或因其他原因无法从客户端访问。请配置 AZURE_STORAGE_CONNECTION_STRING(账户密钥 SAS)或 AZURE_STORAGE_ACCOUNT(托管标识 / 通过 DefaultAzureCredential 使用 az login,需要 Storage Blob Data Contributor + Storage Blob Delegator),以及可选的 AZURE_STORAGE_CONTAINER(默认值为 mcp-itglue-uploads)。
off—stdio(默认值——file_path 直接读取本地磁盘)或不需要此功能时。

对于已托管在 Web 上的内容,url 仍是最简单的来源。 ‡ 高级工具集(选择启用,默认关闭):itglue_get 是只读 GET 透传工具,可访问精选工具未封装的任意 API 路径;itglue_find_endpoint 用于搜索精选的端点目录。通过 ITGLUE_ADVANCED_TOOLSET=true 或 --advanced 启用。密码资源(/passwords)会被硬性拦截——凭据值绝不会传给模型。

只有配置了嵌入提供商时,才会显示向量工具。

向量搜索

设置 OPENAI_API_KEY(或设置 AZURE_OPENAI_API_KEY + AZURE_OPENAI_ENDPOINT,其中 EMBEDDING_MODEL 是你的部署名称),然后针对每个组织运行 itglue_build_vector_index。索引是位于 VECTOR_INDEX_PATH 的 JSON 文件(默认值为 ./vector-index.json)——在临时主机上,请将其指向持久卷。

索引通过以下三种方式保持最新:

  1. IT Glue webhook —— 在 IT Glue 中,webhook 由 Workflows 发送(Admin → Workflows):添加一个 Document 触发器(created/updated),并配置一个 Webhook 操作。工作流操作无法发送自定义请求头,因此请将共享密钥放在 URL 中:

    https://<host>/webhook/itglue?secret=<ITGLUE_WEBHOOK_SECRET>
    

    并使用类似以下内容的 JSON 负载模板:

    键值
    event[trigger_name]
    resource_url[resource_url]
    resource_name[resource_name]
    organization_name[organization_name]

    文档 ID 会从 resource_url 中解析;触发器名称会根据关键词映射为 created/updated/deleted。也接受带有 x-itglue-webhook-signature HMAC-SHA256 请求头的经典 JSON:API 风格负载。

  2. 自动刷新 —— 通过此服务的工具创建 / 更新 / 发布 / 删除的文档,会在后台自动重新索引。

  3. 手动刷新 —— 使用 Authorization: Bearer <ITGLUE_WEBHOOK_SECRET>(或 x-refresh-secret 请求头,或管理员令牌)发送 POST /index/refresh。请求正文 {"document_id": "123"} 会刷新单个文档;空正文会重新爬取所有已索引的组织。返回 202,并在后台处理。

配置参考

变量默认值用途
ITGLUE_API_KEY—服务级 IT Glue API 密钥
ITGLUE_REGIONusus、eu 或 au
ITGLUE_BASE_URL按区域而定覆盖 API 基础 URL
TRANSPORTstdiostdio 或 http
PORT3000HTTP 端口
MCP_TOKENS_VIEWER/EDITOR/ADMIN—每种角色对应的 label:token,label:token
CLIENT_ITGLUE_KEYSwith-tokenBYOK 策略:disabled、with-token、open
ALLOWED_ORIGINS—/mcp 允许的额外浏览器来源(以逗号分隔)。没有 Origin 标头的请求和 localhost 来源始终通过;其他浏览器来源会被拒绝,并返回 403
ITGLUE_ADVANCED_TOOLSETfalsetrue/1 会注册高级工具集(itglue_get、itglue_find_endpoint)
ITGLUE_WEBHOOK_SECRET—Webhook 签名和 /index/refresh 密钥
VECTOR_INDEX_PATH./vector-index.json向量索引文件
OPENAI_API_KEY—启用向量搜索(OpenAI)
AZURE_OPENAI_API_KEY / AZURE_OPENAI_ENDPOINT / AZURE_OPENAI_API_VERSION—启用向量搜索(Azure OpenAI)
EMBEDDING_MODELtext-embedding-3-small嵌入模型 / Azure 部署

CLI 标志 --transport、--port、--region、--base-url、--advanced 会覆盖环境变量。运行 mcp-itglue --help 查看详情。

说明和限制

  • IT Glue 的速率限制:每个密钥 5 分钟内 3000 个请求。
  • IT Glue 文档 API 仅有部分文档;文档/章节端点遵循观察到的 API 行为。
  • 灵活资产特征更新会替换整个 traits 对象——更新工具的说明会提醒模型发回所有 traits。
  • 列表工具会返回每个项目的摘要字段(同时包含在文本和 structuredContent 中),以便默认分页大小保持在客户端令牌限制内;itglue_get_* 工具会返回完整记录。
  • IT Glue 不支持用户身份模拟:给定的 API 密钥始终以其自身身份操作。此处的 RBAC 控制会话可以执行哪些工具调用;BYOK 则遵循 IT Glue 自身的密钥权限。

开发

npm install
npm run dev          # stdio via tsx
npm run dev:http     # http via tsx
npm test             # vitest
npm run build        # tsc → dist/

作者

由 Eugene Samotija(@selic)打造 — defency.net。 更多项目:github.com/selic · LinkedIn

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。