tinyprobe

io.github.kikutano由 GitHub 帳號 kikutano 發布v0.24.0更新於 Nov 7, 2026

API testing in YAML: inspect, call and run endpoints and workflows, with the guide to write them.

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

讓助理透過 guide、inspect、call 與 run 工具,撰寫、驗證並執行 tinyprobe 的 YAML API 測試與工作流程。

可以做什麼
  • 讀取內建指南,了解如何撰寫 tinyprobe 的 API 與工作流程檔案
  • 整體驗證 YAML 測試檔,並指出每個問題的檔案、行與欄
  • 單獨送出端點請求進行試打
  • 執行工作流程,回報每一步的檢查項目、實際值與耗時
  • 把 Postman 集合、OpenAPI 文件或後端程式碼轉成測試,並反覆執行直到通過
適用情境
適合讓編碼助理把現有 API 測試遷移或改寫成儲存庫中的純 YAML 檔案,並在提交前自行執行驗證、反覆修正直到通過。
執行需求
需要本機的 tinyprobe 執行檔或 Docker 映像,以 stdio 方式啟動 MCP 伺服器(tinyprobe mcp)。不需帳號或雲端服務。需要能連線到受測後端的網路,憑證透過 tinyprobe 的環境檔案提供。
安裝前請注意
call 與 run 會對你的後端送出真實 HTTP 請求,可能建立、修改或刪除資料;README 提到助理使用前可能會先詢問你。憑證應放在不納入版本控制的本地環境檔案中。測試檔案與結果都在本機處理,不會送到雲端服務。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 tinyprobe,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[tinyprobe logo: a shell prompt followed by a check mark]

tinyprobe

[CI] [Release] [License: GPL-3.0] [VS Code extension] [tinyprobe-app]

Why tinyprobe · Install · Quick start · Migrate with your AI · Command line · Workflow format · Guide for coding agents · Roadmap

API tests your AI writes and your CI runs. Give your coding agent a Postman collection, an OpenAPI document or your backend's code: it writes the tests as YAML files in your repository, checks them with tinyprobe until they pass, and tells you what it could not convert. Then the same files run in your terminal, in CI, in VS Code and in a small app, from one native binary. No account, no cloud.

bash
curl -fsSL https://raw.githubusercontent.com/kikutano/tinyprobe/main/install.sh | sh

[tinyprobe run output in the terminal]

Why tinyprobe

  • Your AI does the migration, and checks its own work. tinyprobe has no importers: the agent you already use converts the collection, following a guide built into the binary (tinyprobe guide). It validates every file with inspect, tries requests with call and runs the workflows with run until they pass, then writes MIGRATION.md with what it could not convert. On our Postman benchmark (20 requests, 4 planted cases with no equivalent), Claude Code with Sonnet and with Haiku covered 18 of 18 convertible requests, reported 4 of 4 untranslatable cases, invented no syntax and committed no secrets.
  • Mistakes before requests. A file is validated as a whole before anything is sent: every problem with its file:line:column and a "did you mean". A failing check shows the actual value. That is what lets an agent, or you, fix a test in one round.
  • No hidden state. API files only describe endpoints; workflows run them, and every value a step uses is saved by a step you can read above it. Each workflow starts from zero, so it gives the same result on your machine, in CI and in any order (decision 0003).
  • Made for CI. One Native AOT binary of about 9 MB that starts in about 20 ms: no runtime, nothing to install on the runner. A GitHub Action that annotates failing steps in pull requests, a Docker image, and JUnit reports for any CI server.
  • One engine, wherever you work. The same YAML files and the same tinyprobe run in the terminal, in the VS Code extension, in the app for people who don't use a terminal, and in your coding agent through MCP.
  • Your files, your repository. Tests are plain YAML next to your code, reviewed in pull requests. Free and open source under the GPL-3.0.

Install

Linux / macOS

bash
curl -fsSL https://raw.githubusercontent.com/kikutano/tinyprobe/main/install.sh | sh

Windows (PowerShell)

powershell
irm https://raw.githubusercontent.com/kikutano/tinyprobe/main/install.ps1 | iex

Then tinyprobe --version. tinyprobe update updates it in place, with the checksum verified. Archives for every platform, the Docker image (ghcr.io/kikutano/tinyprobe) and the other options are in docs/cli.md.

Quick start

hello.yaml:

yaml
name: Hello tinyprobebase_url: https://jsonplaceholder.typicode.com
endpoints:  create_post:    method: POST    path: /posts    body:      title: ${title}      userId: 1  get_user:    path: /users/${id}
steps:  - name: Create a post    call: create_post    with:      title: hello    expect:      status: 201      body:        $.id: 101        $.title: hello    save:      postId: $.id              # available as ${postId} in the next steps
  - call: get_user    with:      id: 1    expect:      body:        $.email: [email protected]        $.address.city: { contains: Gwen }      duration: { lt: 2s }

Run it:

bash
tinyprobe run hello.yaml
text
  ⚡ tinyprobe 0.24.0
  workflow : Hello tinyprobe  file     : hello.yaml  steps    : 2
  ✓ Create a post  POST   201   587.33ms  /posts  ✓ get_user id=1  GET    200    76.89ms  /users/1
  checks..............: 100.00%  ✓ 6  ✗ 0  steps...............: 2/2 passed  http_reqs...........: 2  3/s  http_req_duration...: avg=332.11ms min=76.89ms med=332.11ms max=587.33ms p(90)=536.28ms p(95)=561.8ms  data_received.......: 559 B  data_sent...........: 28 B  workflow_duration...: 666.86ms
   PASSED   2 steps

When a step fails, every check of that step is listed with the actual value, and the steps after it are not run:

text
  ✗ Wrong expectations  GET    200     4.73ms  /api/headers      ✗ header X-Custom-Header == "something-else"  actual "hello-world"      ✓ $.message contains "headers"      ✗ duration < 1ms  actual 4.73ms

A mistake in the YAML is reported before any request is sent, with every problem and its location:

text
  ✗ The workflow is not valid (2 problems)
  tests/users.yaml:12:5: unknown endpoint 'logn' (did you mean 'login'?)  tests/users.yaml:16:5: unknown key 'expcet' in a step (did you mean 'expect'?)

To try more without writing anything, example/ tests a free public API: clone this repository, then cd example && tinyprobe run workflows/01-read.yaml -e environment.yaml.

Migrate with your AI

Start with tinyprobe init at the root of your repository. It creates the tinyprobe/ folder (api/, workflows/, sequences/, the env files), adds the env files with credentials to .gitignore, and adds a section to AGENTS.md that tells every coding agent to read tinyprobe guide before touching the tests. It never overwrites a file.

Then give your agent (Claude Code, Cursor, Copilot, Codex...) one of these prompts.

From a Postman collection. Export the collection (Collection v2.1) and each environment into the repository, for example in postman/:

text
Read https://raw.githubusercontent.com/kikutano/tinyprobe/main/docs/llm-guide.md (or run `tinyprobe guide`)and follow its section on migrating from Postman: convert the collection and the environments in postman/to tinyprobe files in tinyprobe/, one folder at a time, and run each workflow until it passes. Put secretsonly in tinyprobe/env.local.yaml and add it to .gitignore. Write tinyprobe/MIGRATION.md with what youconverted, what you skipped and why, and tell me which failures look like backend bugs.

Variants of the same request ("Login", "Login - wrong password") become one endpoint called with different arguments, and the values your scripts saved become save. What has no equivalent (a script that computes a signature, pm.sendRequest) is not guessed: it is listed in MIGRATION.md, so you know what the tests do not cover. The same prompt works for Insomnia, Bruno or another tool's exports: name the folder and the tool.

From an OpenAPI document:

text
Read https://raw.githubusercontent.com/kikutano/tinyprobe/main/docs/llm-guide.md (or run `tinyprobe guide`)and follow it, starting from the OpenAPI document openapi.yaml: write one tinyprobe endpoint per operationand workflows that check the documented status codes and response fields, then run them against thelocal backend until they pass. Take test values from the seed data, not from the examples in thedocument. Put credentials only in tinyprobe/env.local.yaml and add it to .gitignore. Tell me where thebackend does not do what the document says.

From the backend code:

text
Read https://raw.githubusercontent.com/kikutano/tinyprobe/main/docs/llm-guide.md (or run `tinyprobe guide`)and follow it: look at this backend's routes, authentication and seed data, write the tinyprobe APIfile and workflows in tinyprobe/, then run them with tinyprobe until they pass. Put credentials only intinyprobe/env.local.yaml and add it to .gitignore. Tell me which failures look like backend bugs.

Give your agent the tinyprobe tools. tinyprobe mcp is an MCP server with the tools guide, inspect, call and run, with JSON arguments and results:

bash
claude mcp add tinyprobe -- tinyprobe mcp          # Claude Code (--scope project shares it in .mcp.json)
json
{ "servers": { "tinyprobe": { "type": "stdio", "command": "tinyprobe", "args": ["mcp"] } } }

That is .vscode/mcp.json for VS Code. Cursor reads .cursor/mcp.json with { "mcpServers": { "tinyprobe": { "command": "tinyprobe", "args": ["mcp"] } } }, Codex ~/.codex/config.toml with [mcp_servers.tinyprobe], command = "tinyprobe", args = ["mcp"]. It is listed in the MCP Registry as io.github.kikutano/tinyprobe. call and run send requests to your backend, so your agent may ask you before using them.

agents/ has ready-made instructions that send an agent to tinyprobe guide: a Claude Code plugin (/plugin install tinyprobe --marketplace kikutano/tinyprobe), a Cursor rule, Copilot instructions, and llms.txt.

Run in CI

yaml
- uses: actions/checkout@v4- uses: kikutano/[email protected]      # installs tinyprobe 0.24.0  with:    path: tinyprobe/workflows    env-file: tinyprobe/env.ci.yaml    vars: |      token=${{ secrets.API_TOKEN }}

The action runs every workflow of the folder, also after a failing one, puts a summary on the job page and marks each failing step at its line in the pull request. On other CI servers use the Docker image or the binary, with --junit for the test tab: see docs/cli.md for GitLab and the others. Exit codes: 0 passed, 1 a step failed, 2 an invalid file or arguments.

The format at a glance

Endpoints and tests live in separate files, so the same endpoints serve many workflows:

yaml
# api/server.yaml: endpoints only, no expectationsbase_url: ${baseUrl}auth:  bearer:    Authorization: "Bearer ${token}"endpoints:  login:    method: POST    path: /api/login    params:      username: admin        # default      password:              # required    body:      username: ${username}      password: ${password}  get_user:    path: /api/users/${id}    auth: bearer
yaml
# workflows/users.yaml: steps that call the endpointsname: Usersimport:  - ../api/server.yamlsteps:  - call: login    with: { password: password }    save: { token: $.access_token }
  - call: get_user    with: { id: 1 }    expect:      status: 200      body:        $.email: [email protected]        $.orders: { gt: 0, lt: 100 }       # several conditions on one value: all must pass        $.role: { in: [admin, owner] }     # OR: one of these values
In a stepDescription
call / withThe endpoint to call and its arguments.
useRun a shared sequence of steps here (a login), with with for its params, or once per item with for_each.
expectstatus, and checks on the body (by JSONPath), headers, cookies and duration: equality, comparisons, contains, in, any, matches (a regular expression) and schema (JSON Schema, also from an OpenAPI document).
saveValues of the response for the next steps, or a cookie's value.
for_eachRepeat the call once per item: a list, a variable or a CSV or JSON file.
untilPolling: repeat the call until conditions pass, every so often, up to a timeout.
sleepA pause, e.g. sleep: 2s.

API files also have auth sets (bearer, API key, Basic, OAuth2 client credentials), query strings, forms and file uploads; workflows have variables, generated values (${$uuid}, ${$now+2h}) and named imports for several services. Everything is in docs/workflow-format.md. docs/example/ uses every feature against a test server you start with one command, and is what CI runs.

VS Code extension

tinyprobe for VS Code runs the same files from the editor: problems underlined as you save, completion and go to definition, ▶ Call above every endpoint, ▶ Run workflow and the Test Explorer, Run to here on every step, the workflow drawn as a diagram that lights up as it runs, the history of your calls and an environment editor.

[A tinyprobe workflow open in VS Code: a Run workflow link above it, a green check next to each step, and the run view with the steps, the checks of the selected step and its response]

Install it from the VS Code Marketplace, or Open VSX for Cursor, Windsurf and VSCodium: code --install-extension kikutano.tinyprobe-vscode.

The app

tinyprobe-app is tinyprobe for people who use neither a terminal nor VS Code: one small download for Windows, macOS and Linux that opens in the browser. Send any request from a form, run workflows and watch them as a diagram, and edit endpoints and steps with forms instead of YAML. It works on the same files, so what you do in the app runs unchanged in a terminal and in CI.

[tinyprobe-app: a workflow as a diagram that lights up as it runs, the items of a for_each counting up, and each value colored the same where it is saved and where it is used]

Learn more

License

Copyright (C) 2026 Gaetano Luigi Lenoci

tinyprobe is free software: you can use, change and share it under the terms of the GNU General Public License, version 3 (GPL-3.0-only). A changed version may be shared, even for a fee, only under the same license and together with its source code.

Releases up to 0.21.0 were published under the MIT License, which still applies to them.

來源:README.md,提交 8110f20

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

5
  1. v0.24.0最新Nov 7, 2026
  2. v0.23.0Nov 5, 2026
  3. v0.22.0Nov 4, 2026
  4. v0.21.0Oct 31, 2026
  5. v0.20.1Oct 31, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分