openapi-docs-mcp 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,142 +1,141 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/yangjh0127/openapi-docs-mcp/main/assets/openapi-docs-mcp-logo.png" alt="OpenAPI Docs MCP" width="760">
3
+ </p>
4
+
1
5
  # OpenAPI Docs MCP
2
6
 
3
- 一个厂商无关的 MCP Server,帮助编码 Agent 搜索和理解 OpenAPI/Swagger 文档,且不会调用文档中描述的真实后端接口。
7
+ > 让编码 Agent 安全、准确地搜索和理解 OpenAPI / Swagger 文档。
4
8
 
5
- 第一版重点保证结果确定、准确和稳定:
9
+ [![npm version](https://img.shields.io/npm/v/openapi-docs-mcp?label=npm)](https://www.npmjs.com/package/openapi-docs-mcp)
10
+ ![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20-339933?logo=node.js&logoColor=white)
11
+ ![License](https://img.shields.io/badge/license-MIT-blue)
6
12
 
7
- - 启动时加载并校验本地或远程 OpenAPI 文档;
8
- - 启动完成后,所有工具调用都直接读取内存;
9
- - 使用明确的字段权重搜索中英文接口元数据;
10
- - 只在查询接口或 Schema 时按需展开本地 `$ref`;
11
- - 限制 Schema 展开深度,并检测循环引用;
12
- - 通过 stdio 暴露 4 个只读 MCP 工具;
13
- - 不绑定 OpenAI、Claude 或其他模型厂商。
13
+ **快速导航:** [名称](#名称) · [简介](#简介) · [详细描述](#详细描述) · [项目状态](#项目状态) · [使用方法](#使用方法)
14
14
 
15
- ## 环境要求
15
+ ---
16
16
 
17
- - Node.js 20 或更高版本
18
- - 开发时建议使用 pnpm 11 或更高版本
17
+ ## 名称
19
18
 
20
- ## 快速开始
19
+ **OpenAPI Docs MCP**
21
20
 
22
- 包已经发布到 npm:[openapi-docs-mcp](https://www.npmjs.com/package/openapi-docs-mcp)
21
+ npm 包:[`openapi-docs-mcp`](https://www.npmjs.com/package/openapi-docs-mcp)
23
22
 
24
- ### 使用 npx(推荐)
23
+ ## 简介
25
24
 
26
- 不需要安装,直接下载并运行指定版本:
25
+ 一个厂商无关的 MCP Server,让编码 Agent 能够搜索和理解 OpenAPI/Swagger 文档。
27
26
 
28
- ```bash
29
- npx -y openapi-docs-mcp@0.1.2 \
30
- --source https://api.example.com/v3/api-docs \
31
- --timeout 30000
32
- ```
27
+ 服务只读取接口文档,不会调用文档中描述的真实后端 API。它支持本地文件和远程地址,启动后使用内存索引提供稳定、快速的查询。
33
28
 
34
- 建议在 MCP 配置中固定版本,例如 `openapi-docs-mcp@0.1.2`,避免新版本自动升级后改变行为。
29
+ ## 详细描述
35
30
 
36
- 如果希望始终使用最新版本:
31
+ OpenAPI Docs MCP 支持 OpenAPI 3.0、3.1 和 Swagger 2.0,可读取 JSON、YAML、本地文件及 HTTP(S) URL。
37
32
 
38
- ```bash
39
- npx -y openapi-docs-mcp@latest \
40
- --source https://api.example.com/v3/api-docs
41
- ```
33
+ 它提供 5 个 MCP 工具:
42
34
 
43
- ### 使用 pnpm dlx
35
+ | 工具 | 作用 |
36
+ | :--- | :--- |
37
+ | `search_api` | 按关键词、路径、Tag、描述或 `operationId` 搜索接口 |
38
+ | `get_api` | 获取接口参数、请求体、响应和展开后的 Schema |
39
+ | `get_schema` | 按名称读取组件 Schema |
40
+ | `list_groups` | 列出 OpenAPI Tags 及接口数量 |
41
+ | `reload_document` | 重新加载文档,无需重启 MCP Server |
44
42
 
45
- ```bash
46
- pnpm dlx openapi-docs-mcp@0.1.2 \
47
- --source https://api.example.com/v3/api-docs \
48
- --timeout 30000
49
- ```
43
+ ### 核心能力
50
44
 
51
- ### 全局安装
45
+ - 支持中英文接口搜索,并对 Summary、Tag、Path 等字段进行确定性加权;
46
+ - 按需展开本地 `$ref`,限制最大深度和属性数量;
47
+ - 检测循环引用,并标记无法解析的引用;
48
+ - 远程文档支持自定义请求头和超时;
49
+ - 刷新失败时保留旧文档,不影响现有查询;
50
+ - 通过 stdio 工作,可接入任意兼容 MCP 的 Agent 或 IDE。
52
51
 
53
- ```bash
54
- npm install --global openapi-docs-mcp@0.1.2
55
- ```
52
+ ## 项目状态
56
53
 
57
- 安装后可以直接执行:
54
+ | 项目 | 状态 |
55
+ | :--- | :--- |
56
+ | 当前版本 | `0.1.4` |
57
+ | 运行环境 | Node.js 20+ |
58
+ | 项目阶段 | 可用的早期版本 |
59
+ | 传输方式 | stdio |
60
+ | 许可证 | MIT |
58
61
 
59
- ```bash
60
- openapi-docs-mcp \
61
- --source https://api.example.com/v3/api-docs \
62
- --timeout 30000
63
- ```
62
+ > **说明:** 当前暂不支持外部文件或 URL `$ref`、向量搜索、Streamable HTTP 部署以及真实后端 API 调用。
64
63
 
65
- 升级全局版本:
64
+ ## 使用方法
66
65
 
67
- ```bash
68
- npm install --global openapi-docs-mcp@latest
69
- ```
66
+ ### 方式一:通过 npx 运行(推荐)
70
67
 
71
- ## 启动参数示例
68
+ 无需安装或克隆项目,直接在 MCP Client 中启动:
72
69
 
73
- ### 加载本地文档
74
-
75
- 支持 OpenAPI/Swagger JSON 和 YAML 文件:
76
-
77
- ```bash
78
- npx -y openapi-docs-mcp@0.1.2 --source ./openapi.json
70
+ ```json
71
+ {
72
+ "mcpServers": {
73
+ "project-api-docs": {
74
+ "command": "npx",
75
+ "args": [
76
+ "-y",
77
+ "openapi-docs-mcp@0.1.4",
78
+ "--source",
79
+ "https://api.example.com/v3/api-docs",
80
+ "--timeout",
81
+ "30000"
82
+ ]
83
+ }
84
+ }
85
+ }
79
86
  ```
80
87
 
81
- 也可以直接使用位置参数:
88
+ ### 方式二:全局安装
82
89
 
83
- ```bash
84
- npx -y openapi-docs-mcp@0.1.2 ./openapi.yaml
85
- ```
86
-
87
- ### 加载远程文档
90
+ 安装后可以直接使用 `openapi-docs-mcp` 命令:
88
91
 
89
92
  ```bash
90
- npx -y openapi-docs-mcp@0.1.2 \
91
- --source https://api.example.com/v3/api-docs
93
+ npm install --global openapi-docs-mcp@0.1.4
94
+ openapi-docs-mcp --source https://api.example.com/v3/api-docs --timeout 30000
92
95
  ```
93
96
 
94
- 默认远程加载超时时间为 10 秒,可以通过 `--timeout` 修改:
97
+ 对应的 MCP Client 配置:
95
98
 
96
- ```bash
97
- npx -y openapi-docs-mcp@0.1.2 \
98
- --source https://api.example.com/v3/api-docs \
99
- --timeout 20000
99
+ ```json
100
+ {
101
+ "mcpServers": {
102
+ "project-api-docs": {
103
+ "command": "openapi-docs-mcp",
104
+ "args": [
105
+ "--source",
106
+ "https://api.example.com/v3/api-docs",
107
+ "--timeout",
108
+ "30000"
109
+ ]
110
+ }
111
+ }
112
+ }
100
113
  ```
101
114
 
102
- ### 加载需要鉴权的文档
115
+ ### 方式三:通过 mise 固定 Node.js
103
116
 
104
- 可以重复使用 `--header`,格式为 `NAME=VALUE`:
117
+ 如果 MCP Client 使用了不兼容的 Node.js 或 `npx`,可以通过 mise 固定运行时版本:
105
118
 
106
119
  ```bash
107
- npx -y openapi-docs-mcp@0.1.2 \
120
+ mise exec node@24 -- npx --yes openapi-docs-mcp@0.1.4 \
108
121
  --source https://api.example.com/v3/api-docs \
109
- --header Authorization="Bearer token" \
110
- --header X-Tenant-Id=tenant-1
111
- ```
112
-
113
- 日志和错误信息只会写入 stderr,stdout 专门用于传输 MCP 消息。
114
-
115
- ## CLI 参数
116
-
117
- ```text
118
- 用法:openapi-docs-mcp --source <文件或URL> [选项]
119
-
120
- 选项:
121
- -s, --source <value> OpenAPI JSON/YAML 文件或 HTTP(S) URL
122
- --header NAME=VALUE 加载远程文档时使用的请求头,可重复传入
123
- --timeout <ms> 远程加载超时时间,默认 10000 毫秒
124
- --strict-validation 严格模式:任何 OpenAPI 校验警告都会阻止启动
125
- -h, --help 显示帮助信息
122
+ --timeout 30000
126
123
  ```
127
124
 
128
- ## MCP Client 配置
129
-
130
- 可以在任意支持 stdio MCP Server 的 Client 中通过 `npx` 启动,无需克隆或构建本项目:
125
+ MCP Client 中,将 `mise` 作为启动命令:
131
126
 
132
127
  ```json
133
128
  {
134
129
  "mcpServers": {
135
130
  "project-api-docs": {
136
- "command": "npx",
131
+ "command": "mise",
137
132
  "args": [
138
- "-y",
139
- "openapi-docs-mcp@0.1.2",
133
+ "exec",
134
+ "node@24",
135
+ "--",
136
+ "npx",
137
+ "--yes",
138
+ "openapi-docs-mcp@0.1.4",
140
139
  "--source",
141
140
  "https://api.example.com/v3/api-docs",
142
141
  "--timeout",
@@ -147,211 +146,72 @@ npx -y openapi-docs-mcp@0.1.2 \
147
146
  }
148
147
  ```
149
148
 
150
- 同一个 npm 包可以使用不同 OpenAPI 文档启动多个实例,因此不同项目之间不会冲突。
149
+ > **提示:** 不同 MCP Client 的外层配置字段可能是 `mcpServers`、`servers` 或其他名称,但 `command` 和 `args` 的内容相同。如果客户端找不到 `mise`,可通过 Windows 的 `where.exe mise` 或 macOS/Linux 的 `which mise` 查询路径,并将 `command` 替换为绝对路径。
151
150
 
152
- ### 同时配置多个实例
151
+ ### 方式四:同时连接多个项目
153
152
 
154
- 每个实例使用不同的 MCP Server 名称和 `--source`:
153
+ 为每份 OpenAPI 文档配置一个独立的 MCP 实例:
155
154
 
156
155
  ```json
157
156
  {
158
157
  "mcpServers": {
159
- "safety-api-docs": {
158
+ "order-api-docs": {
160
159
  "command": "npx",
161
160
  "args": [
162
161
  "-y",
163
- "openapi-docs-mcp@0.1.2",
162
+ "openapi-docs-mcp@0.1.4",
164
163
  "--source",
165
- "https://safety.example.com/v3/api-docs",
166
- "--timeout",
167
- "30000"
164
+ "https://order.example.com/v3/api-docs"
168
165
  ]
169
166
  },
170
- "mall-api-docs": {
167
+ "user-api-docs": {
171
168
  "command": "npx",
172
169
  "args": [
173
170
  "-y",
174
- "openapi-docs-mcp@0.1.2",
171
+ "openapi-docs-mcp@0.1.4",
175
172
  "--source",
176
- "https://mall.example.com/v3/api-docs",
177
- "--timeout",
178
- "30000"
173
+ "https://user.example.com/v3/api-docs"
179
174
  ]
180
175
  }
181
176
  }
182
177
  }
183
178
  ```
184
179
 
185
- ### 使用本地源码构建
180
+ 每个实例单独加载和刷新自己的文档,互不影响。
181
+
182
+ ### 更多启动示例
186
183
 
187
- 参与开发时才需要克隆源码并构建:
184
+ **读取本地文档**
188
185
 
189
186
  ```bash
190
- pnpm install
191
- pnpm build
192
- node dist/cli.js --source ./openapi.json
187
+ npx -y openapi-docs-mcp@0.1.4 --source ./openapi.yaml
193
188
  ```
194
189
 
195
- 本地 MCP 配置需要使用 `dist/cli.js` 的绝对路径:
190
+ **读取需要鉴权的远程文档**
196
191
 
197
- ```json
198
- {
199
- "mcpServers": {
200
- "local-api-docs": {
201
- "command": "node",
202
- "args": [
203
- "C:/absolute/path/openapi-docs-mcp/dist/cli.js",
204
- "--source",
205
- "C:/absolute/path/openapi.json"
206
- ]
207
- }
208
- }
209
- }
192
+ ```bash
193
+ npx -y openapi-docs-mcp@0.1.4 \
194
+ --source https://api.example.com/v3/api-docs \
195
+ --header Authorization="Bearer token" \
196
+ --header X-Tenant-Id=tenant-1 \
197
+ --timeout 30000
210
198
  ```
211
199
 
212
- ## MCP 工具
213
-
214
- ### `search_api`
200
+ ### CLI 参数
215
201
 
216
- 根据自然语言关键词、路径、标签、描述或 `operationId` 搜索接口,返回经过排序的轻量候选结果。
202
+ | 参数 | 说明 |
203
+ | :--- | :--- |
204
+ | `-s, --source <value>` | OpenAPI 文件或 HTTP(S) URL,必填 |
205
+ | `--header NAME=VALUE` | 远程文档请求头,可重复使用 |
206
+ | `--timeout <ms>` | 远程加载超时,默认 10000 毫秒 |
207
+ | `--strict-validation` | 将所有 OpenAPI 校验警告视为错误 |
208
+ | `-h, --help` | 显示帮助 |
217
209
 
218
- 正常工作流是先调用 `search_api` 找到接口,再把结果中的 `id` 传给 `get_api`。
219
-
220
- 输入参数:
221
-
222
- | 参数 | 必填 | 说明 |
223
- |---|---:|---|
224
- | `query` | 否 | 搜索关键词,例如 `异常分页列表` 或 `create user` |
225
- | `method` | 否 | HTTP 方法过滤条件,例如 `GET`、`POST` |
226
- | `tag` | 否 | 精确匹配 OpenAPI Tag |
227
- | `limit` | 否 | 返回数量,默认 10,最大 50 |
228
-
229
- 搜索字段权重:
230
-
231
- | 字段 | 权重 |
232
- |---|---:|
233
- | `summary` | 10 |
234
- | `tags` | 8 |
235
- | `path` | 6 |
236
- | `description` | 4 |
237
- | `operationId` | 2 |
238
-
239
- 中文搜索不依赖空格分词,会使用标准化、包含匹配以及二元/三元字符片段进行评分。
240
-
241
- ### `get_api`
242
-
243
- 获取单个接口的完整上下文,包括:
244
-
245
- - HTTP 方法和路径;
246
- - Summary、Description 和 Tags;
247
- - Path、Query、Header、Cookie 参数;
248
- - Request Body 和 Content-Type;
249
- - Responses;
250
- - Security 和 Deprecated 元数据;
251
- - 按需展开后的 Schema。
252
-
253
- 优先传入 `search_api` 返回的 `id`,也可以传入精确的 `path` 和可选的 `method`。
254
-
255
- `maxDepth` 用于控制 Schema 最大展开深度,默认值为 5,允许范围为 1 到 12。
256
-
257
- ### `get_schema`
258
-
259
- 根据精确名称读取 `components.schemas` 中的 Schema。
260
-
261
- 本地 `$ref` 会按需展开,同时具有:
262
-
263
- - 最大深度限制;
264
- - 最大属性数量限制;
265
- - 循环引用检测;
266
- - 无法解析的引用标记。
267
-
268
- ### `list_groups`
269
-
270
- 列出 OpenAPI Tags 及每个 Tag 下的接口数量。
271
-
272
- 没有 Tag 的接口会归入 `untagged`。
273
-
274
- ## 推荐调用流程
275
-
276
- ```text
277
- 用户描述需要实现的功能
278
-
279
- search_api 搜索候选接口
280
-
281
- 根据 summary、tag、path 选择接口
282
-
283
- get_api 一次获取请求和响应结构
284
-
285
- 必要时再调用 get_schema
286
-
287
- 生成 TypeScript 类型、API 方法和页面调用代码
288
- ```
289
-
290
- ## 开发与测试
210
+ ### 本地开发
291
211
 
292
212
  ```bash
293
- pnpm typecheck
213
+ pnpm install
294
214
  pnpm test
295
215
  pnpm build
216
+ node dist/cli.js --source ./openapi.json
296
217
  ```
297
-
298
- 当前测试覆盖:
299
-
300
- - OpenAPI 3.0 文档加载;
301
- - OpenAPI 3.1 YAML 文档加载;
302
- - Swagger 2.0 文档加载;
303
- - 无效文档错误处理;
304
- - 中文加权搜索;
305
- - Method 和 Tag 过滤;
306
- - 接口请求与响应 Schema 展开;
307
- - 循环引用保护;
308
- - MCP 工具发现与调用。
309
-
310
- ## 当前版本边界
311
-
312
- 第一版有意保持较小的功能范围。
313
-
314
- 已经支持:
315
-
316
- - OpenAPI 3.0、3.1;
317
- - Swagger 2.0;
318
- - JSON 和 YAML;
319
- - 本地文件和 HTTP(S) URL;
320
- - 本地 `$ref` 按需展开;
321
- - stdio MCP 传输。
322
-
323
- 暂不支持:
324
-
325
- - 调用真实后端 API;
326
- - 保存或管理后端鉴权凭证;
327
- - 展开其他文件或 URL 中的外部 `$ref`;
328
- - 向量数据库或 Embedding 搜索;
329
- - Streamable HTTP MCP 部署;
330
- - OpenAPI 文档自动刷新;
331
- - 模型厂商私有能力。
332
-
333
- 当 OpenAPI 文档发生变化时,重启 MCP Server 即可重新加载和建立索引。
334
-
335
- ## 设计原则
336
-
337
- ```text
338
- OpenAPI / Swagger
339
-
340
- 加载与校验
341
-
342
- 标准 OpenAPI Document
343
-
344
- 内存 Operation 索引
345
-
346
- Search + Formatter
347
-
348
- 标准 MCP Tools
349
-
350
- 任意支持 MCP 的 Agent 或 IDE
351
- ```
352
-
353
- 项目不会把 OpenAPI 数据重新转换成一套重复的核心模型。OpenAPI Document 始终是事实来源,自定义类型只用于搜索结果和 MCP 输出。
354
-
355
- Formatter 也不会擅自修复后端文档中的可疑定义,而是忠实返回 OpenAPI 声明的内容,避免工具本身成为新的错误来源。
356
-
357
- 默认使用兼容校验模式。部分 Springdoc 文档会生成包含中文名称的本地 `$ref`;严格的 URI 校验器可能拒绝这类引用。只要引用目标真实存在,本项目会保留警告并继续加载。需要完全遵循严格校验结果时,可以添加 `--strict-validation`。
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAsBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA2CpD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAwBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA2CpD"}
package/dist/cli.js CHANGED
@@ -5,12 +5,14 @@ import { createMcpServer } from "./mcp/server.js";
5
5
  import { OpenApiService } from "./service.js";
6
6
  async function main() {
7
7
  const options = parseArgs(process.argv.slice(2));
8
- const context = await loadOpenApi(options.source, {
8
+ const loadOptions = {
9
9
  ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
10
10
  ...(Object.keys(options.headers).length ? { headers: options.headers } : {}),
11
11
  validationMode: options.strictValidation ? "strict" : "compatible",
12
- });
13
- const service = new OpenApiService(context);
12
+ };
13
+ const reload = () => loadOpenApi(options.source, loadOptions);
14
+ const context = await reload();
15
+ const service = new OpenApiService(context, reload);
14
16
  console.error(`Loaded ${context.operations.length} operations from ${context.source} (OpenAPI ${context.version})`);
15
17
  for (const warning of context.validationWarnings) {
16
18
  console.error(`Validation warning (${warning.count}): ${warning.message}`);
@@ -76,13 +78,13 @@ function requireValue(args, index, option) {
76
78
  return value;
77
79
  }
78
80
  function printHelp() {
79
- console.error(`Usage: openapi-docs-mcp --source <file-or-url> [options]
80
-
81
- Options:
82
- -s, --source <value> OpenAPI JSON/YAML file or HTTP(S) URL
83
- --header NAME=VALUE Header used when loading a remote document (repeatable)
84
- --timeout <ms> Remote loading timeout (default: 10000)
85
- --strict-validation Reject every OpenAPI validation warning
81
+ console.error(`Usage: openapi-docs-mcp --source <file-or-url> [options]
82
+
83
+ Options:
84
+ -s, --source <value> OpenAPI JSON/YAML file or HTTP(S) URL
85
+ --header NAME=VALUE Header used when loading a remote document (repeatable)
86
+ --timeout <ms> Remote loading timeout (default: 10000)
87
+ --strict-validation Reject every OpenAPI validation warning
86
88
  -h, --help Show this help`);
87
89
  }
88
90
  main().catch((error) => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { createOpenApiContext, loadOpenApi } from "./openapi/loader.js";
2
2
  export { createMcpServer } from "./mcp/server.js";
3
3
  export { OpenApiService } from "./service.js";
4
+ export type { OpenApiReloader, ReloadResult } from "./service.js";
4
5
  export { searchOperations } from "./search/search.js";
5
6
  export type { OpenApiContext, OperationEntry, SearchOptions, SearchResult, } from "./types.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAK/C,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAmGlE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAc/C,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CA+HlE"}
@@ -1,10 +1,16 @@
1
+ import { createRequire } from "node:module";
1
2
  import { McpServer } from "@modelcontextprotocol/server";
2
3
  import { z } from "zod";
3
4
  const depthSchema = z.number().int().min(1).max(12).default(5);
5
+ const packageJson = createRequire(import.meta.url)("../../package.json");
6
+ if (typeof packageJson.version !== "string") {
7
+ throw new Error("Missing package version in package.json");
8
+ }
9
+ const serverVersion = packageJson.version;
4
10
  export function createMcpServer(service) {
5
11
  const server = new McpServer({
6
12
  name: "openapi-docs-mcp",
7
- version: "0.1.0",
13
+ version: serverVersion,
8
14
  });
9
15
  server.registerTool("search_api", {
10
16
  title: "Search OpenAPI operations",
@@ -71,6 +77,26 @@ export function createMcpServer(service) {
71
77
  inputSchema: z.object({}),
72
78
  annotations: { readOnlyHint: true, idempotentHint: true },
73
79
  }, async () => success({ groups: service.listGroups() }));
80
+ server.registerTool("reload_document", {
81
+ title: "Reload the OpenAPI document",
82
+ description: "Reload and validate the configured OpenAPI source, then atomically replace the in-memory document. If loading fails, the previous document remains active.",
83
+ inputSchema: z.object({}),
84
+ annotations: {
85
+ readOnlyHint: false,
86
+ destructiveHint: false,
87
+ idempotentHint: true,
88
+ },
89
+ }, async () => {
90
+ try {
91
+ return success(await service.reload());
92
+ }
93
+ catch (error) {
94
+ return failure(`Failed to reload OpenAPI document: ${error instanceof Error ? error.message : String(error)}`, {
95
+ source: service.context.source,
96
+ activeOperationCount: service.context.operations.length,
97
+ });
98
+ }
99
+ });
74
100
  return server;
75
101
  }
76
102
  function success(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,mKAAmK;QACrK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACrE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;SACnD,CAAC;QACF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CACtC,OAAO,CAAC;QACN,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;YACtB,KAAK;YACL,KAAK;YACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC;QACF,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM;KACnD,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,2IAA2I;QAC7I,WAAW,EAAE,CAAC;aACX,MAAM,CAAC;YACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC1D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACpE,QAAQ,EAAE,WAAW;SACtB,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YAClD,OAAO,EAAE,oBAAoB;SAC9B,CAAC;QACJ,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CACxB;YACE,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;QACF,OAAO,GAAG;YACR,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YACd,CAAC,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC/D,QAAQ,EAAE,WAAW;SACtB,CAAC;QACF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,MAAM;YACX,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACjB,CAAC,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,EAAE;gBACnC,gBAAgB,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aACtD,CAAC,CAAC;IACT,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CACtD,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,IAAgB;IAC/B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACzE,iBAAiB,EAAE,IAAI;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,OAAO,GAAe,EAAE;IACxD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;KAClD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAEtE,CAAC;AAEF,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;IAC5C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC;AAE1C,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,aAAa;KACvB,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,mKAAmK;QACrK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACrE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;SACnD,CAAC;QACF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CACtC,OAAO,CAAC;QACN,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;YACtB,KAAK;YACL,KAAK;YACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC;QACF,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM;KACnD,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,2IAA2I;QAC7I,WAAW,EAAE,CAAC;aACX,MAAM,CAAC;YACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC1D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACpE,QAAQ,EAAE,WAAW;SACtB,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YAClD,OAAO,EAAE,oBAAoB;SAC9B,CAAC;QACJ,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CACxB;YACE,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;QACF,OAAO,GAAG;YACR,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YACd,CAAC,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC/D,QAAQ,EAAE,WAAW;SACtB,CAAC;QACF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,MAAM;YACX,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACjB,CAAC,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,EAAE;gBACnC,gBAAgB,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aACtD,CAAC,CAAC;IACT,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CACtD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,4JAA4J;QAC9J,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CACZ,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC9F;gBACE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;gBAC9B,oBAAoB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM;aACxD,CACF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,IAAgB;IAC/B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACzE,iBAAiB,EAAE,IAAI;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,OAAO,GAAe,EAAE;IACxD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;KAClD,CAAC;AACJ,CAAC"}
package/dist/service.d.ts CHANGED
@@ -1,13 +1,25 @@
1
- import type { OpenApiContext, SchemaFormatOptions, SearchOptions } from "./types.js";
1
+ import type { JsonObject, OpenApiContext, SchemaFormatOptions, SearchOptions } from "./types.js";
2
+ export interface ReloadResult extends JsonObject {
3
+ source: string;
4
+ version: string;
5
+ previousOperationCount: number;
6
+ operationCount: number;
7
+ validationWarnings: OpenApiContext["validationWarnings"];
8
+ }
9
+ export type OpenApiReloader = () => Promise<OpenApiContext>;
2
10
  export declare class OpenApiService {
3
- readonly context: OpenApiContext;
4
- constructor(context: OpenApiContext);
11
+ private readonly reloader?;
12
+ context: OpenApiContext;
13
+ private reloadPromise;
14
+ constructor(context: OpenApiContext, reloader?: OpenApiReloader | undefined);
15
+ reload(): Promise<ReloadResult>;
16
+ private performReload;
5
17
  search(options: SearchOptions): import("./types.js").SearchResult[];
6
18
  getApi(input: {
7
19
  id?: string;
8
20
  path?: string;
9
21
  method?: string;
10
- }, options?: SchemaFormatOptions): import("./types.js").JsonObject | undefined;
22
+ }, options?: SchemaFormatOptions): JsonObject | undefined;
11
23
  getSchema(name: string, options?: SchemaFormatOptions): {
12
24
  name: string;
13
25
  schema: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMrF,qBAAa,cAAc;IACb,QAAQ,CAAC,OAAO,EAAE,cAAc;IAA5C,YAAqB,OAAO,EAAE,cAAc,EAAI;IAEhD,MAAM,CAAC,OAAO,EAAE,aAAa,uCAE5B;IAED,MAAM,CACJ,KAAK,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EACtD,OAAO,GAAE,mBAAwB,+CAMlC;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;;;kBAKxD;IAED,UAAU;;;QAST;IAED,WAAW,aAEV;CACF"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,cAAc,CAAC,oBAAoB,CAAC,CAAC;CAC1D;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;AAE5D,qBAAa,cAAc;IAIY,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAH/D,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,aAAa,CAAoC;IAEzD,YAAY,OAAO,EAAE,cAAc,EAAmB,QAAQ,CAAC,EAAE,eAAe,YAAA,EAE/E;IAEK,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,CAapC;YAEa,aAAa;IAa3B,MAAM,CAAC,OAAO,EAAE,aAAa,uCAE5B;IAED,MAAM,CACJ,KAAK,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EACtD,OAAO,GAAE,mBAAwB,0BAMlC;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;;;kBAKxD;IAED,UAAU;;;QAST;IAED,WAAW,aAEV;CACF"}
package/dist/service.js CHANGED
@@ -3,10 +3,41 @@ import { findSchema, formatSchema, listSchemaNames } from "./formatter/schema.js
3
3
  import { findOperation } from "./openapi/operations.js";
4
4
  import { searchOperations } from "./search/search.js";
5
5
  export class OpenApiService {
6
+ reloader;
6
7
  context;
7
- constructor(context) {
8
+ reloadPromise;
9
+ constructor(context, reloader) {
10
+ this.reloader = reloader;
8
11
  this.context = context;
9
12
  }
13
+ async reload() {
14
+ if (!this.reloader) {
15
+ throw new Error("Document reload is not configured for this service");
16
+ }
17
+ if (this.reloadPromise)
18
+ return await this.reloadPromise;
19
+ const promise = this.performReload();
20
+ this.reloadPromise = promise;
21
+ try {
22
+ return await promise;
23
+ }
24
+ finally {
25
+ if (this.reloadPromise === promise)
26
+ this.reloadPromise = undefined;
27
+ }
28
+ }
29
+ async performReload() {
30
+ const previousOperationCount = this.context.operations.length;
31
+ const context = await this.reloader();
32
+ this.context = context;
33
+ return {
34
+ source: context.source,
35
+ version: context.version,
36
+ previousOperationCount,
37
+ operationCount: context.operations.length,
38
+ validationWarnings: context.validationWarnings,
39
+ };
40
+ }
10
41
  search(options) {
11
42
  return searchOperations(this.context.operations, options);
12
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,OAAO,cAAc;IACJ,OAAO;IAA5B,YAAqB,OAAuB;uBAAvB,OAAO;IAAmB,CAAC;IAEhD,MAAM,CAAC,OAAsB;QAC3B,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CACJ,KAAsD,EACtD,OAAO,GAAwB,EAAE;QAEjC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,SAAS;YACd,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;YAC5D,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,OAAO,GAAwB,EAAE;QACvD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,MAAM,KAAK,SAAS;YACzB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACnE,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;aAC3D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,WAAW;QACT,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;CACF"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,41 +1,41 @@
1
- {
2
- "name": "openapi-docs-mcp",
3
- "version": "0.1.2",
4
- "description": "A vendor-neutral MCP server for searching and understanding OpenAPI documents.",
5
- "type": "module",
6
- "bin": {
7
- "openapi-docs-mcp": "dist/cli.js"
8
- },
9
- "exports": {
10
- ".": "./dist/index.js"
11
- },
1
+ {
2
+ "name": "openapi-docs-mcp",
3
+ "version": "0.1.4",
4
+ "description": "A vendor-neutral MCP server for searching and understanding OpenAPI documents.",
5
+ "type": "module",
6
+ "bin": {
7
+ "openapi-docs-mcp": "dist/cli.js"
8
+ },
9
+ "exports": {
10
+ ".": "./dist/index.js"
11
+ },
12
12
  "files": [
13
13
  "dist",
14
14
  "README.md",
15
- "LICENSE"
16
- ],
17
- "scripts": {
18
- "build": "tsc -p tsconfig.build.json",
19
- "dev": "tsx src/cli.ts",
20
- "test": "vitest run",
21
- "test:watch": "vitest",
22
- "typecheck": "tsc --noEmit"
23
- },
24
- "engines": {
25
- "node": ">=20"
26
- },
27
- "license": "MIT",
28
- "dependencies": {
29
- "@modelcontextprotocol/server": "^2.0.0",
30
- "@scalar/openapi-parser": "^0.28.12",
31
- "@scalar/openapi-types": "^0.9.4",
32
- "zod": "^4.4.3"
33
- },
34
- "devDependencies": {
35
- "@modelcontextprotocol/client": "^2.0.0",
36
- "@types/node": "^26.2.0",
37
- "tsx": "^4.23.12",
38
- "typescript": "^7.0.2",
39
- "vitest": "^4.1.10"
40
- }
41
- }
15
+ "LICENSE"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.build.json",
19
+ "dev": "tsx src/cli.ts",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest",
22
+ "typecheck": "tsc --noEmit"
23
+ },
24
+ "engines": {
25
+ "node": ">=20"
26
+ },
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "@modelcontextprotocol/server": "^2.0.0",
30
+ "@scalar/openapi-parser": "^0.28.12",
31
+ "@scalar/openapi-types": "^0.9.4",
32
+ "zod": "^4.4.3"
33
+ },
34
+ "devDependencies": {
35
+ "@modelcontextprotocol/client": "^2.0.0",
36
+ "@types/node": "^26.2.0",
37
+ "tsx": "^4.23.12",
38
+ "typescript": "^7.0.2",
39
+ "vitest": "^4.1.10"
40
+ }
41
+ }