Degurechaff57/dsh-openapi
DeepSeek Harness 的安全 OpenAPI 3.x 发现与 API 调用工具
Project Overview项目介绍
dsh-openapi is a DeepSeek Harness plugin that exposes OpenAPI 3.x documents as three model-facing tools: openapi_list, openapi_describe, and openapi_call. Use it to let an agent discover, describe, and invoke REST APIs in a structured way, with declared parameters, environment-backed credentials, and bounded responses. It is suited for integrating external services without giving the agent a raw shell. Caveat: specs are admin-configured, the default is read-only, and private networks are blocked unless explicitly allowed; remote $ref and deepObject are not yet followed.
dsh-openapi 是 DeepSeek Harness 插件,把 OpenAPI 3.x 文档暴露为 openapi_list、openapi_describe、openapi_call 三个模型工具,用于代理发现、描述并调用外部 API。在需要让代理对接结构化 REST API、又想限定权限与负载时使用。默认仅允许 GET/HEAD,禁止私网与本地主机,并剥离敏感响应头。配置以管理员预设为主,不在运行时接受任意规范。
请帮我了解并安装插件:【dsh-openapi】【https://github.com/Degurechaff57/dsh-openapi】
Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。
Or use CLI install (for developers)或使用命令行安装(适合开发者)
CLI Install命令行安装
dsh plugin --profile web add github:Degurechaff57/dsh-openapi
把 Degurechaff57/dsh-openapi 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-openapi
Give DeepSeek Harness a safe, structured doorway into any OpenAPI 3.x API.
dsh-openapi is a native DeepSeek Harness bundle that indexes configured OpenAPI documents and adds three model-facing tools:
openapi_listdiscovers APIs and searches operations.openapi_describereturns parameters, request bodies, servers, and responses for one operation.openapi_callvalidates and invokes an operation with bounded output.
It is plain ESM JavaScript, so installing from GitHub does not run a build or prepare script.
Why this plugin
Harness already gives an agent a shell. APIs still benefit from a narrower interface: operation discovery without reading a huge spec into the model context, declared-parameter validation, environment-backed credentials, read-only defaults, SSRF checks, and response limits. This plugin provides those controls without patching the Harness agent loop.
Install
dsh plugin --profile web add github:Degurechaff57/dsh-openapi
The bundle installs with an empty API catalog. Add API entries to your profile's cordis.patch.yml:
- id: openapi
config:
apis:
- id: petstore
source: https://petstore3.swagger.io/api/v3/openapi.json
baseUrl: https://petstore3.swagger.io/api/v3
allowedMethods: [GET, HEAD]
Start Harness and ask:
Use
openapi_listto find the operation that lists pets, describe it, then call it.
For a source checkout, install the local directory instead:
dsh plugin --profile web add /absolute/path/to/dsh-openapi
Credentials
Keep secrets out of YAML. Map a request header to an environment variable:
- id: openapi
config:
apis:
- id: internal-api
source: ./openapi/internal.yml
baseUrl: https://api.example.com/v1
headers:
Accept: application/json
credentials:
- header: Authorization
env: INTERNAL_API_TOKEN
prefix: 'Bearer '
allowedMethods: [GET, HEAD, POST]
The credential header is applied after model-supplied header parameters, so a tool call cannot override it. Missing environment variables fail the call before network I/O.
Configuration
Top-level options:
| Field | Default | Purpose |
|---|---|---|
apis |
[] |
Configured API documents |
timeoutMs |
30000 |
Per-call timeout |
maxSpecBytes |
2097152 |
Maximum local or remote spec size |
maxResponseBytes |
262144 |
Maximum response body returned to the model |
maxRedirects |
3 |
Redirect limit; every destination is rechecked |
maxOperationsPerApi |
1000 |
Catalog size limit per API |
Each apis entry accepts:
| Field | Default | Purpose |
|---|---|---|
id |
required | Stable id used in tool calls |
source |
required | HTTP(S) URL, file: URL, absolute path, or path relative to the Harness process |
baseUrl |
spec server | Explicit API server override |
headers |
{} |
Static non-secret headers |
credentials |
[] |
Header/environment-variable mappings |
allowedMethods |
[GET, HEAD] |
Methods the tool may invoke |
allowPrivateNetwork |
false |
Opt in to loopback/private-network destinations |
Security defaults
- Specs are administrator-configured; the model cannot load an arbitrary spec at runtime.
- APIs start read-only: only
GETandHEADare enabled. - Calls accept only parameters declared by the selected operation.
- URL credentials, localhost names, private IP literals, and hostnames resolving to private IPs are blocked by default. Redirect destinations are checked again, and credentials are stripped on cross-origin redirects.
- Response bodies are capped and sensitive response headers such as
set-cookieare not returned. - Credential values come from the environment, override call-supplied values, and are never included in tool results.
allowPrivateNetwork: true is necessary for local development servers. It is an explicit trust decision, not a substitute for a network sandbox. DNS can change between validation and connection, so do not use untrusted OpenAPI documents or hostile DNS infrastructure for high-assurance isolation.
Current scope
- OpenAPI 3.0 and 3.1 JSON/YAML
- Local
#/...references - Common path, query, header, and cookie serialization
- JSON and text responses
Remote $ref documents and specialized serialization such as deepObject are intentionally not followed yet. The plugin fails loudly instead of making an ambiguous request.
DeepSeek Harness is in developer preview. This release is tested against the current source CLI (0.1.0-rc.5) and npm prerelease (0.1.0-rc.6); compatibility updates will follow upstream breaking changes.
Development
npm install
npm run check
The test suite covers parsing, references, catalog generation, request construction, credential precedence, method restrictions, private-network rejection, redirect validation, output truncation, and plugin registration.
toby-bridges/api-relay-audit
lxzy-7/dsh-plugin-guard
omdsh-dev/dsh-security-audit
hccccc01333/dsh-excel-chat
EL4CTEO/roblox-devforum-mcp