内容
# JGS Archi Bridge
用于 [Archi](https://www.archimatetool.com/) 的 Eclipse PDE 插件,通过 [模型上下文协议(MCP)](https://modelcontextprotocol.io/) 公开 ArchiMate 模型,使大型语言模型(LLM)能够通过自然语言查询、分析和修改企业架构模型。
## 功能
JGS Archi Bridge 在 Archi 中嵌入了一个 HTTP 服务器,该服务器支持 MCP。启动后,任何兼容 MCP 的 LLM 客户端(Claude、Cline、LM Studio 等)都可以连接并与当前打开的 ArchiMate 模型交互:提问、搜索元素、遍历关系、创建视图图表,甚至创建或修改模型内容。
服务器提供了 **69 个 MCP 工具**,涵盖查询、搜索、创建、布局、路由、评估、批量操作、图像、特殊化等功能,此外还有 **14 个 MCP 资源**,包含 ArchiMate 参考资料、工作流指南和 LLM 视角配方库。
**示例对话:**
> **您:** "哪些应用程序支持客户门户能力?"
>
> **LLM:** 搜索元素,遍历关系,并返回: *"7 个应用程序支持客户门户:OrderService、PaymentGateway、..."*
## 要求
| 需求 | 版本 |
|---|---|
| [Archi](https://www.archimatetool.com/) | 5.7+ |
| Java | 21+ |
| 兼容 MCP 的 LLM 客户端 | Claude CLI、Cline、LM Studio 等 |
**LLM 模型大小建议:** 建议参数量至少为 8B,推荐 14B 以上以实现可靠的工具调用,复杂视图合成工作流建议 70B 以上。
## 安装
1. 从 [Releases](../../releases) 页面(或 `bin/` 目录中的预构建工件)下载最新的 `.archiplugin` 文件
2. 在 Archi 中:**帮助 > 管理插件 > 安装新插件...** 或复制到 Archi 的 `dropins/` 文件夹
3. 重启 Archi
## 快速入门
### 1. 启动服务器
在 Archi 中打开一个 ArchiMate 模型,然后:
**菜单:** `MCP 服务器 > 启动 MCP 服务器`
**MCP 服务器** 在 Archi 的菜单栏中有三个选项:
| 菜单项 | 功能 |
|---|---|
| **启动 MCP 服务器** | 启动嵌入式服务器;切换到 **停止 MCP 服务器** 以停止运行。 |
| **审批模式** | 可选的切换按钮,用于人类拥有的审批门控。开启后,代理的更改会排队等待您的审查,而不是立即应用;请参阅 [突变安全性](#mutation-safety)。 |
| **待处理审批(N)** | 打开 **待处理审批** 停靠视图;`N` 是待处理更改的实时计数。 |
服务器行为(端口、绑定地址、TLS、身份验证等)单独在 **窗口 > 首选项 > MCP 服务器** 下配置;请参阅 [配置](#configuration)。默认端点是 `http://127.0.0.1:18090`。
### 2. 配置您的 LLM 客户端
#### Claude 代码(CLI)
在您的项目的 `.mcp.json` 或 `~/.claude.json` 中:
```json
{
"mcpServers": {
"archi": {
"type": "http",
"url": "http://127.0.0.1:18090/mcp"
}
}
}
```
或通过 CLI:
```bash
claude mcp add --transport http archi http://127.0.0.1:18090/mcp
```
#### Claude 桌面版
Claude 桌面版不支持 Streamable HTTP,因此需要一个代理。安装 [uv](https://docs.astral.sh/uv/) (一个 Rust 二进制文件),然后将其添加到您的 `claude_desktop_config.json` 中:
**Windows:**
```json
{
"mcpServers": {
"archi": {
"command": "C:\\Users\\YOUR_USER\\.local\\bin\\uvx.exe",
"args": ["mcp-proxy", "--transport", "streamablehttp", "http://127.0.0.1:18090/mcp"]
}
}
}
```
**macOS:**
```json
{
"mcpServers": {
"archi": {
"command": "uvx",
"args": ["mcp-proxy", "--transport", "streamablehttp", "http://127.0.0.1:18090/mcp"]
}
}
}
```
#### Cline / 其他 MCP 客户端
将您的 MCP 客户端指向 Streamable-HTTP 端点:
```
http://127.0.0.1:18090/mcp
```
对于较旧的客户端,还可以在 `/sse` 处使用 SSE 传输。
### 3. 开始查询
启动服务器并连接您的 LLM 客户端后,您可以以自然语言提问:
- *"给我一个架构模型的概述"*
- *"在模型中找到所有应用程序服务"*
- *"Order Processing 组件依赖于什么?"*
- *"显示 CRM 和 ERP 系统之间的关系"*
- *"创建一个显示支付处理流程的新视图"*
- *"自动布局并路由此视图上的连接"*
## 配置
通过 Archi 中的 **窗口 > 首选项 > MCP 服务器** 访问。
| 设置 | 默认值 | 描述 |
|---|---|---|
| **端口** | `18090` | HTTP(S) 服务器端口 |
| **绑定地址** | `127.0.0.1` | 网络接口(默认为本地主机) |
| **自动启动** | `false` | Archi 启动时自动启动服务器 |
| **日志级别** | `INFO` | 日志详细程度:`DEBUG`、`INFO`、`WARN`、`ERROR` |
| **启用 TLS** | `false` | 使用 HTTPS 和 TLS 加密 |
| **密钥库文件** | *(空)* | PKCS12/JKS 密钥库的路径(如果使用自签名证书则自动生成) |
| **密钥库密码** | *(空)* | 密钥库文件的密码,通过 Equinox 安全存储在您的 OS 密钥链中存储(无需单独管理密码);绝不会以明文写入磁盘 |
| **启用 bearer-token 身份验证** | `false` | 在每个请求上需要 `Authorization: Bearer <token>` 头部(请参见下文) |
### TLS / HTTPS
服务器支持可选的 TLS 加密。要启用:
1. 在首选项中,勾选 **启用 TLS(HTTPS)**
2. 点击 **生成自签名证书** 以自动创建密钥库
3. 重启服务器:端点更改为 `https://127.0.0.1:18090`
客户端必须信任自签名证书。对于 `curl` 测试,请使用 `-k` 标志。对于 LLM 客户端,请将证书导入客户端的信任存储或 JVM `cacerts`。
密钥库密码(无论您输入还是使用按钮生成)通过 Equinox 安全存储在您的 OS 密钥链中存储(与承载令牌和 Archi 本身使用的相同存储),而不是在纯文本首选项文件中。如果您在早期版本中设置了密钥库密码,则在首次启动时会自动迁移。
### 启用身份验证(承载令牌)
默认情况下,服务器不需要身份验证:任何可以访问端口的客户端都可以调用工具,这就是为什么默认绑定仅限于环回地址。如果您绑定到非环回地址,或者简单地希望在环回地址上也需要一个秘密令牌,请启用一个 **可选的 bearer 令牌**:
1. 在 **窗口 > 首选项 > MCP 服务器 > 身份验证** 中,勾选 **启用 bearer-token 身份验证**。第一次启用时会生成一个 256 位令牌,并存储在您的 OS 密钥链中(通过 Equinox 安全存储,无需单独管理密码)。
2. 点击 **复制** 以复制令牌,或 **生成/重新生成令牌** 以滚动令牌(重新生成令牌会使仍在使用旧令牌的客户端失效)。
3. 重启服务器。现在,每个请求到 `/mcp` 和 `/sse` 都必须发送 `Authorization: Bearer <token>`;缺少、格式错误或错误的令牌会返回 `401`。
配置您的客户端以发送头部:
**Claude 代码(CLI):**
```bash
claude mcp add --transport http archi http://127.0.0.1:18090/mcp --header "Authorization: Bearer <token>"
```
**Claude 代码(`.mcp.json` / `~/.claude.json`):**
```json
{
"mcpServers": {
"archi": {
"type": "http",
"url": "http://127.0.0.1:18090/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
```
**Claude 桌面版(通过 `mcp-proxy`):** 通过代理传递头部:
```json
{
"mcpServers": {
"archi": {
"command": "uvx",
"args": ["mcp-proxy", "--transport", "streamablehttp", "--headers", "Authorization", "Bearer <token>", "http://127.0.0.1:18090/mcp"]
}
}
}
```
**`curl`(测试):**
```bash
curl -X POST http://127.0.0.1:18090/mcp -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
```
身份验证 **默认关闭**:现有的配置如果没有 `Authorization` 头部,仍将继续工作,直到您启用它。在非环回绑定上,还请启用 TLS,以便令牌不会以明文发送。
### 安全模型
服务器通过 HTTP 公开具有突变和文件触摸功能的工具,因此了解信任边界至关重要。 [`SECURITY.md`](SECURITY.md) 说明了服务器默认保护什么(环回绑定、源/主机验证、请求/会话/图像资源限制、UTF-8 请求体强制执行、人类拥有的审批门控),以及您作为操作员的责任(传输加密、客户端身份验证、保护非环回绑定),以及如何报告漏洞。在绑定到非环回地址或将代理指向不受信任的输入之前,请阅读它。
## 可用工具
服务器提供了 **69 个 MCP 工具**,分为功能类别。
### 查询和模型检查(6 个工具)
| 工具 | 描述 |
|---|---|
| `get-model-info` | 模型概述:名称、`purpose`、自定义 `properties`、按类型和层划分的元素/关系/视图计数,以及特化计数。读取对应于 `update-model` 的内容 |
| `get-element` | 按 ID 检索元素(单个通过 `id` 或批量通过 `ids` 数组) |
| `get-views` | 列出视图,可选的视图类型或名称过滤 |
| `get-view-contents` | 视图图表内容:元素、关系、视觉位置、连接路由、图像视觉效果和完整的样式表面(排版、渐变、alignment、线样式、`labelExpression`),以便可以读取和验证样式突变。 `format: "tree"` 返回包含层次结构,视觉组和 ArchiMate 元素容器同时下降;嵌套的子项出现在父节点的 `children` 数组中,并带有 `childCount`。图形节点和边也带有它们的视觉标识符(节点上的 `viewObjectId`,边上的 `viewConnectionId`),因此返回的视觉效果可以直接输入 `remove-from-view` / `update-view-object` / `update-view-connection` 而无需第二次查找。在 Archi 5.10 上,连接还报告 `relativePosition`(连接“标签偏移”锚点),因此可以通过 `auto-route-connections` 应用的偏移量可以以编程方式读取回来(在 Archi 5.7 上省略,对于未偏移的默认值) |
| `get-relationships` | 遍历关系,具有可配置的深度(0-3 跳跃)或多跳跃链遍历,具有方向/类型/层过滤器 |
| `find-concept-usage` | 反向查找:给定元素或关系 ID,返回每个视图和引用它的视觉对象/连接。 `get-view-contents` 的逆操作。在删除元素 / 删除关系 / 重命名 / 重新类型之前使用,以查看跨视图的占用情况 |
### 搜索和发现(4 个工具)
| 工具 | 描述 |
|---|---|
| `search-elements` | 跨元素名称、文档和属性进行全文搜索,可选类型、层和 `specialization` 过滤器 |
| `search-relationships` | 按文本、类型、源/目标元素层和 `specialization` 搜索所有关系(不需要元素 ID) |
| `get-or-create-element` | 发现优先:如果存在确切的名称+类型匹配,则返回现有元素,否则创建新元素 |
| `search-and-create` | 组合搜索 + 条件创建,并显示重复候选 |
### 元素和关系创建(4 个工具)
| 工具 | 描述 |
|---|---|
| `create-element` | 创建具有类型验证和重复检测的 ArchiMate 元素。可选的 `specialization` 参数自动创建特化。指向其 ArchiMate 层对元素类型非法的文件夹 ID 将被前端拒绝 `FOLDER_LAYER_MISMATCH`(委托给 Archi 自己的文件夹规则),而不是稍后在 Archi 保存模型时失败 |
| `create-relationship` | 创建具有 ArchiMate 规范规则强制执行的关联。可选的 `specialization` 参数自动创建特化。可选的类型条件语义属性:`accessType`(AccessRelationship)、`associationDirected`(AssociationRelationship)、`influenceStrength`(InfluenceRelationship) |
| `create-view` | 创建具有可选的视图类型和连接路由器类型的新的图表视图 |
| `clone-view` | 复制具有所有视觉内容的现有视图(元素、组、注释、连接、弯曲点、样式)。克隆引用相同的模型对象 |
### 元素、关系、视图和模型更新(4 个工具)
| 工具 | 描述 |
|---|---|
| `update-element` | 更新元素名称、文档、属性或 `specialization`(传递 `""` 清除) |
| `update-relationship` | 更新关系名称、文档、属性或 `specialization`(传递 `""` 清除)。可选的类型条件语义属性:`accessType`(AccessRelationship)、`associationDirected`(AssociationRelationship)、`influenceStrength`(InfluenceRelationship)。源、目标和类型不可变 |
| `update-view` | 更新视图名称、视图、文档、属性或连接路由器类型 |
| `update-model` | 更新加载的模型的 `name`、`purpose` 和自定义 `properties` 作为单个撤销单元。至少必须提供三个中的一个;省略的字段保持不变。空字符串 `purpose` 清除字段;空属性值删除键 |
### ArchiMate 特化(5 个工具)
特化是 ArchiMate 概念类型的 IS-A 子类型(例如,“微服务”是一种 `ApplicationComponent`,“云服务器”是一种 `Node`)。使用它们来分类元素的种类,而不是环境或版本等实例属性。请参阅 `archimate://reference/archimate-specializations` 以获取完整指南。
| 工具 | 描述 |
|---|---|
| `list-specializations` | 列出模型中定义的每个特化,包含 `(name, conceptType, layer, usageCount, imagePath)`。可选的 `conceptType` 过滤器 |
| `create-specialization` | 显式定义特化,而不创建任何元素。对于重复的 `(name, conceptType)`,操作幂等,有助于在会话开始时预注册词汇。可选的 `imagePath` 设置特化的图标(Archi 在每个特化概念上渲染它) |
| `update-specialization` | 重命名特化名称和/或设置其图标。拒绝合并到现有目标名称。现有引用随名称更改而移动。可选的 `imagePath`(设置/更改图标)和 `clearImagePath: true`(显式清除),两者互斥。至少必须提供 `newName`、`imagePath` 或 `clearImagePath` 之一 |
| `delete-specialization` | 删除特化。如果任何概念使用它,则默认拒绝;传递 `force: true` 以分离引用并删除在一个原子命令中 |
| `get-specialization-usage` | 审计查询:列出引用特化的每个元素和关系。在重命名或删除之前调用 |
### 视图合成(9种工具)
所有放置新的可视对象(`add-to-view`、`add-group-to-view`、`add-note-to-view`、`add-view-reference-to-view`、`add-image-to-view`)和`update-view-object`的工具,都接受完整的视觉样式表面:填充/线条/字体颜色,不透明度,线宽,线型(`solid` / `dashed` / `dotted` / `none`),字体排版(`fontName`、`fontSize`、`fontStyle`),渐变,`deriveLineColor`,`outlineOpacity`,`figureType`(`rectangular` / `tabbed`),`textAlignment`,`verticalTextAlignment`,以及特定的注释`borderType`(`dogear` / `rectangle` / `none`)。现有的调用是字节相同的;仅提供需要设置的字段。所有这些字段都可以通过`get-view-contents`读取,因此样式变更可以在写入后验证。
当`add-to-view`或`add-group-to-view`将子元素嵌套在容器内时,如果您没有显式设置填充颜色,则父元素的填充颜色将自动退回到一个微妙的背景色(`#F4F4F4`),以便嵌套结构表现为深度而不是扁平块。此颜色的调整是基于来源的,并且是幂等的(仅影响未授权的填充颜色;显式着色的容器不会被修改),并且作为一个撤销单元,与放置操作一起进行。如果需要,可以传递`recede: false`来抑制此行为。
视图对象也可以通过`update-view-object` **锚定**到目标容器,记录一个`{anchorTarget, anchorEdge, dx, dy}`,使其位置在提交时根据目标的当前边界进行解析,而不是根据冻结的快照进行解析。边缘`below`(默认)跟踪目标的底部增长,`above`/`right`/`left`跟踪相应的边缘。当后续修改移动或增长目标时,每个锚定对象都在同一个撤销单元内重新定位。目标和对象必须共享一个坐标空间;自我锚定和跨空间锚定被拒绝。`add-note-to-view`的内容相对放置使用相同的边缘解析器。
| 工具 | 描述 |
|---|---|
| `add-to-view` | 将模型元素放置到视图图表中(同一个元素可以出现在多个视图中)。可选`imagePath`、`imagePosition`、`showIcon`用于自定义图标叠加层,`labelExpression`用于每个视图对象的动态标签模板(例如`"${name}"`、`"${property:Owner}"`),以及`recede: false`以抑制在未授权填充容器中嵌套时的自动背景颜色 |
| `add-group-to-view` | 添加一个视觉分组矩形(纯视觉容器,无模型表示)。可选`imagePath`、`imagePosition`、`showIcon`用于自定义图标叠加层,以及`recede: false`以抑制在未授权填充容器中嵌套时的自动背景颜色 |
| `add-note-to-view` | 添加一个文本注释(纯视觉,无模型表示)。可选`imagePath`、`imagePosition`、`showIcon`,以及特定于注释的`borderType` |
| `add-view-reference-to-view` | 将另一个ArchiMate视图嵌入为可点击的缩略图(代理驱动的等效于Archi GUI的拖放视图)。需要`viewId`(目标)和`referencedViewId`(源)。引用视图的名称不存储在视觉上;重命名引用视图会自动更新每个嵌入 |
| `add-image-to-view` | 添加一个独立的图像作为一级图表节点(与注释、分组和视图引用同级)。需要`viewId`和`imagePath`,由`add-image-to-model`或`list-model-images`返回。默认大小是图像的自然尺寸;如果路径错误,则拒绝并返回`IMAGE_NOT_FOUND`。与`update-view-object`的`imagePath`不同,后者设置现有元素的图标叠加层 |
| `add-connection-to-view` | 添加一个视觉连接,代表现有的模型关系,具有可选样式、标签抑制和标签定位 |
| `update-view-object` | 更新视图上的视觉元素的定位、大小、样式、图像、`labelExpression`和/或`anchor`。可选锚定(`anchorTarget`、`anchorEdge` `below`/`above`/`right`/`left`,默认为`below`,`anchorDx`/`anchorDy`)使对象*跟随*目标容器的边缘,在提交时根据目标的当前边界进行解析,而不是根据冻结的绝对位置解析,以便注释始终位于组下方。目标和对象必须共享一个坐标空间;传递一个空的`anchorTarget`以清除 |
| `update-view-connection` | 替换弯折点,更新样式,切换标签可见性,和/或设置视图上连接的标签位置 |
| `apply-positions` | 原子化应用一个完整的视觉布局(每次调用最多10,000个条目) |
### 视图清理(2种工具)
| 工具 | 描述 |
|---|---|
| `remove-from-view` | 从视图中删除一个视觉元素或连接(模型对象保留) |
| `clear-view` | 从视图中删除所有视觉元素和连接(模型对象保留) |
### 布局和路由(11种工具)
> **LLM代理:** 在调用`auto-route-connections`或`auto-layout-and-route`之前,请获取`archimate://prompts/routing-preconditions-checklist`。路由管道无法从缺失的前提条件中恢复;它只能路由代理设置的几何图形。间距便利工具自我终止:如果视图明显太密集,间距工具会返回`terminationReason: density_floor_reflow_required`,并提供用户同意的结构重流,表面给用户而不是循环间距工具。
| 工具 | 描述 |
|---|---|
| `auto-route-connections` | 使用基于清晰度加权的可见性图A\*路径查找的正交连接路由,具有走廊方向性、多样性和分组墙感知、通道全局有序微调和路由后路径直线化。两种模式:`mode: "full"`(默认)通过可见性图A\*重新路由整个连接;`mode: "terminals-only"`仅纠正每个连接的第一个/最后一个弯折点,使终端段正交(在分组视图上使用ELK后最佳,以修复对角线终端条目,而不会引起完全重新路由的交叉膨胀);它还会扫描冗余的内部共线弯折点(终端L型弯折与现有主干线共线),因此重新路由将`connectionRedundantBendpointCount`趋向于零,而不触及固定的终端出口锚点。两种模式现在都清除**面外终端紧贴**(连接离开元素面,然后运行一两个像素并行紧贴),通过将第一个主干线清除面:完整管道使用双轴健康地板出口通道(在两个轴上强制15像素健康平行间隙),以及自身面短路,捕获小于10像素的微型紧贴),而`terminals-only`镜像相同的地板作为纯几何图形,具有每边正交性后备,当检测到提升将引入对角线时(检测器在8像素预言家处触发,因此已经清除的终端是字节相同的)。这将`offFaceParallelTerminalCount`信号驱动到零。 gated最终传递还**溶解一个重合的同面中心端口**:两个终端下游阶段折叠到低度元素面的一个周边端口上(`coincidentFacePortCount`缺陷`assess-layout`报告),通过移动可以移动的终端到自由的沿面槽;如果没有真正的冲突和清晰的槽,则它是一个字节相同的无操作,因此它永远不会扰乱密集中心的自身分布或添加交叉。 可选`autoNudge`模式自动移动阻塞元素(并调整父组的大小以包含它们),并在一个原子操作中重新路由失败的连接。在Archi 5.10上,当中间标签在位置选择后仍然在其自己的端点框上渲染时,路由器应用连接的“标签偏移”(`relativePosition`)以清除它(可以清除端点标签溢出在保留位置的路由上;运行时守护,在Archi 5.7上是一个沉默的无操作)。 响应带有`structuredWarnings: List<{code, message, remediationTool, remediationViolatorIds}>`字段,用于确定性LLM迭代(`AUTO_NUDGE_SKIPPED_SIBLING_OVERLAP`指示代理运行`layout-within-group`在父之前重新路由;`EGRESS_LIFT_LAYOUT_BOUND`报告路由器生成然后回滚面外出口提升,因为应用它们会将平行连接间隙缩小到15像素的健康地板以下,残留紧贴是布局绑定的,因此匹配的`nextSteps`条目命名为扩展元素而不是静默拒绝) |
| `auto-layout-and-route` | 两种模式:`auto`(默认)使用ELK Layered计算位置和路由;`grouped`协调完整的分组视图工作流程(`layout-within-group` + `arrange-groups` + `optimize-group-order` + `auto-route-connections`)原子化。 当设置`targetRating`时智能迭代:因子感知迭代为每个层调整正确的旋钮,具有平台检测功能,以便在迭代停止改善主导层时提前退出 |
| `layout-within-group` | 使用行、列或网格模式排列容器内的子元素。 容器可以是视觉组**或** ArchiMate元素容器(`ApplicationComponent`、`Node`、`ApplicationFunction`等),它包含嵌套的子元素:相同的`arrangement` / `spacing` / `padding` / `columns` / `autoResize` / `autoWidth`语义适用于两者。 注释、视图引用和连接被拒绝为容器 |
| `layout-flat-view` | 适用于扁平(非分组)视图的自动布局:行、列或网格排列,可选按名称/类型/层和类别分组 |
| `arrange-groups` | 在网格、行或列布局中,将顶级组相互定位。 **密度感知默认:** 当视图上没有显式设置`spacing`时,工具根据连接数推导出一个连接数感知的默认间距(≤15 → 80像素,16-30 → 100像素,> 30 → 120像素)。传递显式`spacing`以抑制 |
| `optimize-group-order` | 重新排序组内的元素,以最小化组间边缘交叉 |
| `resize-elements-to-fit` | 使用SWT字体指标调整视图上的所有(或选定的)元素以适应其标签。 两遍算法适用于嵌套式包含:先是子元素,然后是父元素。 可选`wrapFit: true`保持每个元素的宽度,仅增长其高度,以便长标签换行到额外行而不是被剪裁或强制进入过宽的框中,对于固定宽度容器中的嵌套标签非常有用(父级增长以包含换行子级后,使用`auto-route-connections`)。 **仅限标签易读性,不适用于连接扇出。** 对于具有高连接数的中心元素,请使用`detect-hub-elements`和`update-view-object` |
| `adjust-view-spacing` | 在现有视图上扩大元素和组之间的间距,然后在一个原子操作中重新路由。 当视图正确布局但视觉上过于紧密时使用,而无需从头开始运行ELK,丢失手动放置意图。 **密度感知默认:** 当`interElementDelta`在具有`coincidentSegmentCount > 2`或`connectionEdgeCoincidenceCount > 4`的视图上被省略时,工具根据连接数推导出一个连接数感知的默认间距(≤15 → 目标60像素,16-30 → 80像素,> 30 → 100像素)。 传递`interElementDelta: 0`以抑制。 间距膨胀后,后续通道检测任何子元素溢出其父组边界并调整父组大小 |
| `apply-element-spacing-recommendations` | 便利工具,运行一个嵌入式观察→决策→密度感知终止控制循环,以扩大组内元素间距。 每次迭代采取一个小的单调步骤,重新运行`assess-layout`,并继续/升级/停止;降级步骤始终恢复。 集线器感知层选择(80/100/120像素)当`detect-hub-elements`报告候选者。 返回/后`assess-layout`快照以及`terminationReason` / `iterationCount` / `appliedDeltas[]`。 一个调用 = 一个撤销步骤。 设置`dryRun: true`以预览 |
| `apply-group-spacing-recommendations` | 同类对称便利工具,运行相同的嵌入式控制循环,仅扩展组间走廊(保留组顺序和拓扑)。 集线器感知连接对层级提升至100/140/160像素。 返回/后`assess-layout`快照以及`terminationReason` / `iterationCount` / `appliedDeltas[]`。 `dryRun: true`预览。 与集线器大小和`apply-element-spacing-recommendations`一起,这完成了路由前提条件三元组 |
| `apply-spacing-recommendations` | 复合便利工具,在一个事务调用中运行两个协调的控制循环(元素臂和组间臂)。 `scope`参数(`both` / `element` / `group`)选择运行哪些臂。 膨胀膝盖常数是**每次迭代的步幅上限**(+80像素元素/ +100像素组间每次迭代),防止累积膨胀超过膝盖而没有固定的每次调用上限;当触发步幅上限时,`elementKneeClampApplied` / `groupKneeClampApplied`生效。 报告每个臂的`terminationReason` / 迭代次数 / 应用的增量。 当两个轴需要调整时使用;单臂兄弟姐妹覆盖单轴更改 |
### 布局评估与分析(2个工具)
> 指标缩写(M1-M6,R8,`parallelConnectionGap_V_p10`(V_p10),HPQ)在此 [术语表](docs/glossary.md) 中定义。
| 工具 | 描述 |
|---|---|
| `评估布局` | 评估传统8个指标严重性分级评级的视图布局质量(重叠、交叉、直通、重合段、非正交终端、间距、对齐、标签重叠),以及感知对齐的指标(M1可见段长度非正交终端,M2内部终止,M3之字形,M4连接与边缘重合,M5中心质量,R8走廊利用率)和M6二维评级(布局层 × 路由层)。还报告信息性的 `parallelConnectionGap_V_p10` 信号(V轴上第10个百分位的并行段间隙,以ArchiMate参考的13.30像素为锚点)用于窄走廊检测。信息检测涵盖标签截断、子元素标签被父元素遮挡、图像兄弟重叠(`imageSiblingOverlapCount`:现在还检查专业化图标并根据实际像素尺寸调整图像大小)和剪裁注释(`noteClipCount`:注释的文本需要比其框更大的高度,通常是一个明确的`高度`,它会破坏自动适应)。连接标签重叠检测是渲染校准的(字形框加宽1.35倍以匹配Archi的渲染),现在标记在自己的端点框上渲染的标签(通道 `auto-route-connections` 通过Archi 5.10标签偏移清除),同时正确忽略使用 `showLabel: false` 禁用的标签和已经通过应用的标签偏移清除的标签(偏移感知)。自己的端点测试结合了面积分数规则和盒覆盖规则(捕获一个标签覆盖一个小端点框,例如一个连接点),短段提升(降低门槛,当标签比其锚定的第一/最后一个段更宽时),和连接点近乎零门槛(连接点渲染为一个实心的深色形状,没有可读的内部,因此标签轻微接触连接点在约5%时被标记;捕获一个超大连接点,盒覆盖规则只在小连接点上触发)。一个影响评级的 `hubNeighbourClearanceMin` (像素)报告任何拥挤的中心面最紧密的中心边缘到辐条行的间隙;低于60像素的拥挤门槛限制布局层,以便一个中心扩大到其邻居拥挤,不能再评级为`好`(`-1.0` = 没有可测量的中心,没有评级影响)。两个路由质量检测影响路由层:`connectionThroughNoteCount` 标记一个连接直接穿过注释的框或元素的渲染图像矩形(存在于Tier-3R上限良好;补充基于框的 `connectionPassThroughs`,路由层采用更坏的情况,因此没有双重惩罚),和 `nonOrthogonalInteriorSegmentCount` 将非正交终端检查扩展到中间路线段(Tier-2R上限一般,类似于其终端兄弟姐妹并通过更坏的情况组合)。另外两个信息检测涵盖冗余的共线弯点(`connectionRedundantBendpointCount`:一个可移除的点,在水平或垂直运行上,其删除不会改变渲染的正交形状,与 `zigzagCount` 不同;近共线对角微调和路由器固定的终端出口端口除外,因此非零计数意味着一个真正可折叠的内部点,一个 `terminals-only` 重新路由删除);和相同颜色的容器/子元素“平面块”填充(`containerFillEqualsChildCount`:自动退背景的备用,触发条件是 *authored* 相同颜色填充)。另外三个信息检测关闭标签/边界盲点:`connectionGrazesVisualCount` 标记一个连接触摸或剪裁注释或图像的 *边界带* (外部条带,通过视觉内部测试丢弃,包括视觉效果太小而无法插入;与 `connectionThroughNoteCount` 分开,因此交叉被归类为恰好一个通或擦);`labelOnNoteCount` 标记一个连接 *标签* 在注释的矩形上渲染(标题冲突,路由检测器无法看到,因为标签独立于线条定位);和 `labelOnGroupCount` 标记一个连接标签在视觉组的 *标题带* 上(标题条冲突,标签重叠检测器跳过,因为它将组视为透明容器;组内标签不被标记)。另外两个信息检测使终端/边缘图像更加清晰:`offFaceParallelTerminalCount` 标记一个连接终端路由 *离开* 元素面然后并行运行紧贴它(第一个外部段在离开面8像素内运行):亚像素出口stub在 `nonOrthogonalTerminalCount` 中被可见长度守卫抑制,通过相同的终端槽面属性解决,从未馈送评级(它是神谕 `auto-route-connections` 驱动到零);`coincidentFacePortCount` 标记一个元素面,其中两个或多个连接终端碰撞到 *相同* 周长端口(两个边缘似乎从一个点离开): `hubPortQualityScore` (M5)的盲点,其每个面的守卫从未评估一个面仅承载两个或三个重合连接,因此它读取一个空的 `1.0`,尽管有冲突(信息,M5未触及;神谕路由器重合端口溶解驱动到零);并且M4边缘重合检测器现在通过 `edgeCoincidenceGrazedElementCount` 枚举 *每个* 碰撞元素,带有 `edgeCoincidenceGrazedElements` 元素ID违规者密钥,而影响评级的 `connectionEdgeCoincidenceCount` 及其连接ID `edgeCoincidence` 密钥保持字节相同(每个连接计算一次)。标题评级也被降噪:`ratingBreakdown.overallExcludingAcceptedCosmetics` 重新计算 `overallRating`,移除 `nonOrthogonalTerminals` 的贡献(对角线终端段是ELK自动布局的直线签名),作为一个地板,只能等于或改善 `overallRating`;当两者不同时,差距仅是终端化妆品(使用 `auto-route-connections` 模式 `terminals-only` 清除,或接受);当相等时,评级反映一个真正的缺陷。一个 `coverage` 地图声明每个缺陷维度,运行是否实际评估它(`checked`:检测器运行并完全覆盖维度;`partial`:仅覆盖一些故障模式,因此渲染验证其余部分;`not-checked`:没有检测器,不存在未知;`not-applicable`),因此一个完成门可以从“检查和清洁”中读取“部分检查”,从“从未查看”读取 *coverage* 和 *ratingBreakdown*;信息,从不影响评级。大多数维度报告一个固定的注册级别,但 `labelOverlaps` 是 *contextual*:声明 `checked`,它在任何运行中降级为 `partial`,其中标签比其宿主段更宽(标签可以几何清理一个邻居框,但拥挤模式未验证);并且 `corridorCentering` 是一个固定的 `not-checked`,使得 `corridorUtilisationScore` 衡量多占用走廊 *spread*,而不是单个路由是否居中或紧贴边缘。M3(之字形)跳过已经分类为直通的连接,因此单个连接不会被双重标记。自元素直通被报告但排除在评级之外。 `nextSteps[]` 信封命名正确的先决条件工具,并带有违规者ID,当检测到重叠、边界冲突、低中心质量分数或分组视图间距/交叉违规时,并为近乎饱和的容器嵌套中心视图发出单个诊断调整与重新定位步骤(以间隙读取为门控)。离面平行终端补救是路由器一致且诚实的:一个自信的布局修复,当本地走廊低于健康地板时,否则延迟到 `auto-route-connections`(交叉引用 `EGRESS_LIFT_LAYOUT_BOUND` 警告),而不是过度承诺垂直重新路由,并且在有争议的中心面上(两个或多个连接共享它),它命名 *spreading the connections* 而不是一个简单的加宽。可选的 `includeViolatorIds` 返回每个指标的视觉对象ID,用于目标修复。可选 `scope` 选择 `single`(默认:一个 `viewId`)或 `all-views`,它评估每个图表并返回一个紧凑的每个视图映射(`{name, overallRating, overallExcludingAcceptedCosmetics, elementCount, connectionCount, overlapCount, nonOrthogonalTerminalCount, connectionPassThroughCount}`)用于一次调用的关闭扫描,然后深入到任何 `fair`/`poor` 视图,并使用单个范围调用 |
| `检测中心元素` | 通过每个元素计算的视觉连接数来识别中心元素,降序排列。中心阈值:≥ 5个连接是一个中心候选者;> 6个连接获得一个明确的1D尺寸建议 `baseDimension + 15px × (connectionCount − 6)`;对于> 12个连接的元素,响应还提供一个2D尺寸建议(`width += 15 × ⌈excess/2⌉`,`height += 15 × ⌊excess/2⌋`),以便代理可以将端口分布在所有四个边缘上。评估器的内部 `M5_FACE_GUARD_MIN_CONNECTIONS = 4` 是一个单独的每个面守卫,用于M5中心端口质量指标,而不是中心检测阈值 |
### 视图操作(1个工具)
| 工具 | 描述 |
|---|---|
| `自动连接视图` | 为已放置在视图上的元素之间的所有现有模型关系创建视觉连接。可选 `showLabel: false` 以抑制标签,以及可选 `lineColor`、`fontColor`、`lineWidth` 以批量样式创建每个连接(与 `relationshipTypes` 过滤器结合,按类型样式) |
### 文件夹管理(5个工具)
| 工具 | 描述 |
|---|---|
| `获取文件夹` | 列出文件夹(默认从根级开始,或特定文件夹的子文件夹) |
| `获取文件夹树` | 文件夹层次结构作为嵌套树结构 |
| `创建文件夹` | 创建一个新子文件夹 |
| `更新文件夹` | 更新文件夹名称、文档或属性 |
| `移动到文件夹` | 将模型对象(元素、关系、视图或文件夹)移动到不同的父文件夹。移动到一个文件夹,其ArchiMate层对对象非法,将被拒绝并返回 `FOLDER_LAYER_MISMATCH`,与 `create-element` 应用的相同快速失败检查 |
### 删除(4个工具)
| 工具 | 描述 |
|---|---|
| `删除元素` | 删除一个元素:级联删除关系和所有视图引用 |
| `删除关系` | 删除一个关系:级联删除所有视图连接 |
| `删除视图` | 删除一个视图及其视觉内容(模型元素保留) |
| `删除文件夹` | 删除一个文件夹(需要 `force: true` 表示非空文件夹) |
### 导出(1个工具)
| 工具 | 描述 |
|---|---|
| `导出视图` | 将视图渲染为PNG、JPG、SVG或PDF:内联返回(base64 / blob)或写入文件。可选 `quality`(1-100,默认90)用于JPEG编码;其他格式忽略。矢量格式(SVG、PDF)保持 `width`/`height` 未设置,因为它们是分辨率无关的。可选 `outputDirectory` 控制文件保存的位置(自动创建目录;默认为临时目录)。SVG和PDF需要与Archi 5.7+捆绑的 `com.archimatetool.export.svg` 包。每个响应都带有模型的单调突变计数器作为 `modelVersion`(内联模式:顶级字段;文件模式:在 `_meta` 中);将其与后续 `assess-layout` 的 `_meta.modelVersion` 进行数值比较:较低的导出值意味着模型在渲染后发生更改,因此图像已过时,应在视觉关闭前重新导出 |
### 图片(2个工具)
| 工具 | 描述 |
|---|---|
| `将图像添加到模型` | 将图像(图标)导入模型存档。首选:`filePath`(本地文件)或 `url`(HTTP下载);这些绕过LLM文本通道,避免base64损坏。备用:`imageData`(base64)。提供恰好一个。返回存档的 `imagePath`,用于视图合成工具。图像被重复使用 |
| `列出模型图像` | 列出模型存档中所有图像及其路径和尺寸。使用 `imagePath` 值与视图合成工具一起,在不重新导入的情况下将图像设置为元素、组或注释 |
### 批处理和突变控制(4个工具)
| 工具 | 描述 |
|---|---|
| `开始批处理` | 开始批处理模式:突变被排队而不是立即应用 |
| `结束批处理` | 原子提交所有排队的突变,或回滚(丢弃所有) |
| `获取批处理状态` | 检查操作模式和排队的操作数量 |
| `批量突变` | 执行多个突变作为单个复合命令,具有0索引的反向引用( `$N.id` 解析为操作N的结果;创建工具无法引用其自己的尚未创建的结果),以及可选的 `continueOnError`。其中一个操作是视图范围内的 `set-view-label-expression`,它将一个 `labelExpression` 模板(例如 `${name} ${property:evidenceMark}`)应用于视图上的每个合格对象,单个原子操作:可追溯、幂等和类型可过滤(默认范围是ArchiMate **元素** 对象;可选 `objectTypes` 扩展到注释/组)。一个非空白名称守卫在 *设置* 时跳过空白命名对象(没有半个空白字符),但在 *清除* 时绕过;每个操作的结果报告 `appliedCount` / `skippedCount`。一次扫描 = 一个撤销单位 |
### 撤销/重做(2个工具)
| 工具 | 描述 |
|---|---|
| `撤销` | 使用可选步骤数撤销最近的突变操作()。 **仅限于代理自己的更改**:在堆栈上停止并拒绝跨越任何手动编辑,因此代理永远不会无声地恢复手动工作(要撤销手动更改,必须提交新的提案)。人类的原生Ctrl + Z是无范围的,仍然可以撤销任何操作 |
| `重做` | 重做先前撤销的操作()。仅限于代理自己的更改,与 `撤销` 对称 |
### 审批工作流(1个工具)
审批 **关卡由Archi中的人类**(桌面切换)拥有,而非由代理拥有。MCP表面仅公开一个只读观察工具:代理可以看到更改被关卡但无法启用/禁用关卡或批准自己的排队更改。
| 工具 | 描述 |
|---|---|
| `列出待处理审批` | 列出等待人类审批的待处理突变提案(只读) |
### 会话管理(2个工具)
| 工具 | 描述 |
|---|---|
| `设置会话过滤器` | 设置适用于后续所有查询的持久过滤器和字段选择 |
| `获取会话过滤器` | 检索当前活动的会话范围过滤器和字段选择 |
### 响应控制
所有查询工具都支持响应优化参数:
- **字段选择:** `fields` 参数具有预设(`minimal`、`standard`、`full`)或自定义字段数组
- **字段排除:** `exclude` 参数省略特定字段
- **分页:** 自动适用于大结果集,具有基于光标的继续
## MCP 资源
服务器为LLM客户端提供14个参考资源。
### 提示
| URI | 描述 |
|---|---|
| `archimate://prompts/model-exploration-guide` | LLM高效搜索和遍历ArchiMate模型的策略指南 |
| `archimate://prompts/explore-dependencies` | ArchiMate元素系统依赖分析的工作流模板 |
| `archimate://prompts/landscape-overview` | 生成架构景观总结的工作流模板 |
| `archimate://prompts/routing-preconditions-checklist` | 单页检查清单,供LLM代理在调用 `auto-route-connections` 或 `auto-layout-and-route` 之前获取任何非平凡视图。三个前提条件(中心大小、元素间距、组排列 + 走廊友好间距),每个验证一次,以及一个处置矩阵,将视图形状映射到前提条件顺序 |
### 参考资料
| URI | 描述 |
|---|---|
| `archimate://reference/archimate-layers` | ArchiMate层与元素类型的综合映射,描述和概念到元素类型决策辅助(组件 vs 服务、流程 vs 功能、节点 vs 组件、参与者 vs 角色) |
| `archimate://reference/archimate-relationships` | 所有ArchiMate关系类型及其有效源/目标组合和用法指南 |
| `archimate://reference/archimate-specializations` | 特殊化(IS-A子类型)词汇:何时使用特殊化与属性、每层的常见模式以及发现/创建/审计/删除工具管道 |
| `archimate://reference/archimate-view-patterns` | 整理的观点模式、布局算法指导和ArchiMate视图的绘图最佳实践 |
### 视图配方
用于布局非常规 ArchiMate 视图的渐进式披露配方库。首先获取索引;它声明了不变的构建序列,一次将常规视图(分层、景观、层次结构、信息结构)路由到视图模式原则,并将非常规视图指向具有匹配拓扑块的单个完整配方页面。
| URI | 描述 |
|---|---|
| `archimate://recipes/index` | 选择器:首先获取。常规与非常规决策表,不变的构建序列和家族选择器 |
| `archimate://recipes/application-integration` | 应用合作/集成视图的中心辐射式配方 |
| `archimate://recipes/behaviour-process-flow` | 业务流程合作的泳道图配方,以及服务设计/客户旅程频带布局 |
| `archimate://recipes/motivation` | 动机视图的有向影响链式配方(利益相关者 → 驱动因素 → 评估 → 目标 → 要求) |
| `archimate://recipes/technology-deployment` | 嵌套部署配方:节点作为容器,部署软件/工件,通过网络路径连接 |
| `archimate://recipes/roadmap-migration` | 实现和迁移视图的从左到右的平台时间轴配方 |
## 提示库
与上述 MCP 资源(LLM 客户端通过协议获取)分开,顶级 [`prompts/`](prompts/) 文件夹保存 **您粘贴到具有 Archi MCP 工具连接的代理会话中的即用提示**。每个文件都是自包含的:替换任何 `{{PLACEHOLDER}}` 令牌并运行。
| 提示 | 用途 |
|---|---|
| [`prompts/repo-to-archimate-model.md`](prompts/repo-to-archimate-model.md) | 将代码仓库反向工程为完整的、带有证据标记的 **ArchiMate 3.2** 模型:元素、关系、文件夹和上下文 → 景观 → 组件视图栈,每个概念都带有证据强度标记。迭代和可恢复(打开的 Archi 模型是检查点);可以针对特定标签、版本、分支或提交。 |
`repo-to-archimate-model.md` 也作为 **`/repo-to-archi`** Claude Code 斜杠命令分发,该命令嵌入了提示的副本以及存储库参数和克隆步骤。命令副本不会自动更新;`prompts/` 是源,因此在编辑此处提示后重新同步命令副本。
## 突变安全性
所有写入操作都与 Archi 的 **CommandStack** 集成,使每个突变都可以通过 Archi 中的 `Ctrl+Z` 或 `undo` / `redo` 工具 **撤销**。
**逐字存储验证。** 包含格式良好的 HTML/XML 实体令牌(`&`、`<`、` `、`&amp;`,...)的名称、标签、视图对象文本或 `labelExpression` **将被拒绝,并带有纠正提示**,而不是静默存储为转义字面量: recurring `&` footgun。裸露的与号和非实体文本(`R&D`、`A & B`、`<tag>`、`${name} & ${property:x}`)被接受并按字节存储。规则涵盖 `create-*` / `update-*` / `add-*` 及其 `bulk-mutate` 等价项。
**审批模式** 添加了一个人为干预的门槛,**由人拥有**:代理操作工具,但永远无法移动门槛或批准自己的更改:
```
人在 Archi 中将“审批模式”打开(MCP 服务器菜单)
→ 代理的突变队列为“待处理”(不应用)
→ 代理调用 list-pending-approvals → 看到受阻的内容,告诉用户在 Archi 中确认
→ 人在 Archi 中批准/拒绝 → 应用或丢弃
```
切换仅存在于人的一侧:没有 MCP 工具可以启用/禁用审批或批准提案。您的选择 **在重启后被记住**(存储在 MCP 首选项中);全新安装默认 **GATED**(安全默认值)。关闭门需要 Archi 中的确认;打开门是一键操作。审批模式是一个全局开关(一个人,一个桌面,一个门),代理可以通过 `get-model-info` (`approvalMode`)读取当前状态。
**待处理审批视图。** 当审批模式打开时,您在 Archi 内的 **待处理审批** 停靠视图中审查和应用代理的排队更改。从 **窗口 → 显示视图 → MCP 服务器 → 待处理审批** 或 **MCP 服务器 → `待处理审批 (N)`** 菜单项(也显示实时计数)打开它。每个受阻的工具调用(包括整个 `bulk-mutate`)都是 **一张卡片**,显示带有破坏性计数(删除/移除)的纯语言效果汇总,以琥珀色突出显示。 **`显示更改`** 展开卡片为命名、动词前缀的行(删除提升到顶部),带有原始参数的 **技术详细信息** 披露。 **`批准`** 应用更改(包含删除的卡片在您展开它一次后保持禁用); **`拒绝`** 丢弃它,对模型不做任何更改。工具栏 **`全部安全批准`** 一键清除纯粹附加的卡片, **`全部批准 ⚠`** 在一次确认后清空所有内容,确认会显示删除计数。新受阻的更改实时出现,无需刷新。
卡片的效果文本 **由服务器从模型的自身真相中生成**,因此您可以仅凭卡片做出决定,无需打开 **技术详细信息**:关系命名两个端点(`创建 ServingRelationship: 'Payment Gateway' → 'Fraud Engine'`,删除添加其级联),`bulk-mutate` 卡片的行按操作命名(`+ 创建 “Payment Gateway”(ApplicationComponent)`,`↔ 连接 “Payment Gateway” → “Fraud Engine”(ServingRelationship)`)。代理可以在 `begin-batch` 或 `bulk-mutate` 上传递 **可选 `intent`** (纯语言“为什么”);当存在时,它显示为安静的 `agent's note:` 行 **在** 效果下方;它永远不会替换或优先于服务器效果,服务器从不依赖于空或通用注释。效果是非伪造的服务器基本真相;意图是单独的、较低信任的主张,服务器从不依赖于它。
**批处理模式** 将突变分组为原子事务:
```
begin-batch()
→ create-element(...)
→ create-relationship(...)
→ add-to-view(...)
end-batch()
→ 所有操作一起成功或全部回滚
```
## 故障排除
**服务器无法启动**
- 检查端口 18090 是否已被占用:`lsof -i :18090`
- 验证首选项中的绑定地址是否有效
**LLM 客户端无法连接**
- 确认服务器正在运行(菜单显示“停止 MCP 服务器”)
- 验证端口是否与您的客户端配置匹配
- 测试连接性:`curl -X POST http://127.0.0.1:18090/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'`
**模型显示为空**
- 确保在连接之前在 Archi 中打开了 ArchiMate 模型
- 如果模型在会话启动后打开,请重新连接 LLM 客户端
**突变因验证错误而失败**
- 检查错误中的 `archiMateReference` 字段:它引用了相关的 ArchiMate 规范部分
- 使用 `search-and-create` 代替 `create-element` 以避免重复
**TLS 连接问题**
- 验证密钥库文件是否存在且密码正确
- 对于自签名证书,请确保客户端信任该证书或在 `curl` 中使用 `-k`
**故障排除:安全存储(保存令牌或密钥库密码时出现“安全存储不可用”)**
bearer 令牌和 TLS 密钥库密码存储在 Equinox 安全存储中,由 OS 保护的主密码(**macOS 密钥链** 或 **Windows 凭证存储 / DPAPI**)加密。如果该 OS 保护的主密码条目丢失或锁定,保存将失败,提示“安全存储不可用”。这是环境/凭证存储状态问题,而不是数据问题:应用程序 **永远不会** 退回到以明文存储秘密,已配置的任何值都保持不变。(在 macOS 上,日志中的底层错误读取 `SecurityException: Could not obtain password. Result: -25300`;在 Windows 上,它表现为一个 `StorageException`,报告无法获取主密码。)
要恢复,请重置安全存储,以便 Equinox 可以创建新的主密码:
1. **退出 Archi.**
2. 移开安全存储文件(备份,因此可逆)。它位于 Archi 实例区域:
- **macOS:**
```bash
mv ~/Library/Application\ Support/Archi/secure_storage \
~/Library/Application\ Support/Archi/secure_storage.bak
```
- **Windows** (PowerShell):
```powershell
Move-Item "$env:APPDATA\Archi\secure_storage" "$env:APPDATA\Archi\secure_storage.bak"
```
如果路径在您的设置中不同,确切位置在引用的 `.metadata/.log` 文件中显示。
3. **重启 Archi.** Equinox 自动重新创建存储(您可能会获得一个一次性 OS 提示,允许访问 Keychain / 凭证存储;请允许)。
4. 重新输入旧存储中存在的任何秘密:**bearer 令牌**(在首选项中生成/重新生成),**TLS 密钥库密码**(重新输入或使用生成自签名证书),以及如果您使用它们,任何其他 Archi 凭证(例如 coArchi 模型仓库登录)。
> 注意:Archi(与完整的 Eclipse IDE 不同)在任何平台上都不在其菜单中公开 **错误日志** 视图。要读取完整的堆栈跟踪,请直接打开您的 Archi 实例区域内的 `.metadata/.log` 文件(在 macOS 上为 `~/Library/Application Support/Archi/.metadata/.log`,在 Windows 上为 `%APPDATA%\Archi\.metadata\.log`)。
## 致谢
- [Archi](https://www.archimatetool.com) - Archi® 建模工具包
- [ArchiMate](https://publications.opengroup.org/archimate-library) - ArchiMate® 规范
- [Eclipse IDE](https://eclipseide.org) - Eclipse IDE™
- [MCP](https://modelcontextprotocol.io/) - 模型上下文协议™
- [ELK](https://github.com/eclipse-elk/elk) - Eclipse Layout Kernel™
- [Jackson](https://github.com/FasterXML/jackson) - Jackson JSON 库
- [Jetty](https://github.com/jetty/jetty.project) - Eclipse Jetty® - Web 容器和客户端
- [SLF4J](https://github.com/qos-ch/slf4j) - Java 简单日志 facade
## 许可证
该项目根据 MIT 许可证授权。
详见 [LICENSE](LICENSE) 获取详细信息。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器