Picodev Lab

io.github.PICODEV-SAS由 GitHub 帳號 PICODEV-SAS 發布v0.11.0更新於 Oct 24, 2026

Arduino benches simulated in the browser: sessions, sketch push, simulation, tests, challenges.

已驗證Streamable HTTP可網頁執行開發者工具AI 與機器學習

概覽

AI 產生的概覽

Picodev Lab 讓助理執行 Arduino 實驗工作階段:推送草稿碼、在訪客瀏覽器中模擬電路、讀取序列埠輸出、擷取訊號並提交答案。

可以做什麼
列出實驗台並開啟、輪詢或關閉工作階段,包含可見性與檢視連結,並為模擬或真實實驗台排隊、查詢狀態和退出。將程式碼或已編譯程式推送到訪客瀏覽器,或在自由模式下替換電路。讀取模擬狀態、序列埠輸出與實驗台說明,錄製並讀取邏輯與類比擷取,支援 UART 或 SPI 解碼。在挑戰模式下提交答案、進入下一關,並在真實實驗台輪次中拍攝快照。起草專案規格書、以 PDF 提交,並向 Picodev 送出會議請求。
適用情境
適合指導他人完成 Arduino 練習或在瀏覽器實驗環境中做原型,也適合需要模擬或真實實驗台量測、序列埠日誌與訊號擷取來除錯電路時使用。也適用於把訪客的專案想法整理成規格書並送出會議請求。
執行需求
遠端 streamable HTTP 端點;未宣告任何套件、環境變數或標頭。訪客必須在瀏覽器中開啟工作階段連結,否則不會進行任何模擬。真實實驗台需要排隊並取得輪次;本機編譯需要 arduino-cli 等工具鏈。
安裝前請注意
工作階段與人的瀏覽器共用:推送程式碼、程式或電路會替換其編輯器或模擬中的內容,關閉工作階段會中斷檢視者並忘掉全部內容。變更可見性會暴露檢視連結。提交規格書或會議請求會把訪客的專案細節與聯絡資訊傳送給 Picodev。實驗台說明不提供挑戰提示。

安裝

在 SourceWeft 中

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

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.PICODEV-SAS%2Fpicodev-lab/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "picodev-lab": {
      "type": "http",
      "url": "https://lab.picodev.fr/mcp"
    }
  }
}

README

該儲存庫沒有 README。

工具

23

decode_capture

Decode a capture

Decode a ready logic capture of the session (browser or bench). protocol "uart" with channels {rx} and options {baud (300-1000000, 9600), bits (5-9, 8), parity (none, even, odd), stop (1, 2), invert (false)}; "spi" with {sck, mosi?, miso?, cs?} (one data pin at least) and options {mode (0-3, 0), bit_order (msb, lsb), bits (8)}; "i2c" with {scl, sda}. channels are pins of the capture. Returns {capture, protocol, frames, next, problems}, 2000 frames from offset. uart frames {t_us, value, error?} (framing, parity) and text, the printable bytes of the page; spi {t_us, mosi?, miso?} per word, while cs is low when given; i2c {t_us, kind (start, restart, address, data, stop), value?, rw?, ack?}. problems: what makes the decoding doubtful.

輸入參數offsetcapture必填optionssessionchannels必填protocol必填agent_token

list_setups

List setups

The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free, challenge) and their benches by kind (status open, or soon: not offered yet).

無需輸入參數。

open_session

Open a session

Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser.

輸入參數mode必填setup必填

push_to_editor

Push sources to the editor

Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback of push_program: use it only when the toolchain to compile locally is missing (no arduino-cli, core or library).

輸入參數runfiles必填sessionagent_token

push_program

Push a compiled program

Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's <sketch>.ino.hex) to the human's browser, which loads it in the simulator without compiling and, if run, starts it. files: the sources, shown read-only in the editor, never compiled. During a turn on a real bench, the bench gets it too. Prefer it to push_to_editor, which is the fallback when the local toolchain is missing.

輸入參數hex必填runfilessessionagent_token

read_simulation

Read the simulation

Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms (2000 at most). `serial` is the full serial output of the current run (up to 16 KiB), reset at each compile and NOT starved by pin events: prefer it over reconstructing serial from `events`. During a turn on a real bench, `serial` and the serial events come from the bench's board (since the turn began or the last compile), `t` on the turn's clock. In challenge mode: the level's brief and its results. circuit_modified: the circuit differs from the setup sheet's (types, ids, properties, wires; not positions or colours), null when unknown. circuit_error: the editor's last refusal of a pushed circuit, returned once.

輸入參數sessionsince_msagent_token

set_visibility

Set visibility

Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected.

輸入參數sessionvisibility必填agent_token

queue_join

Join the bench queue

Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected.

輸入參數kind必填sessionagent_token

queue_status

Queue status

The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds).

輸入參數sessionagent_token

queue_leave

Leave the bench queue

Give back the place in the queue, or the turn if it has started.

輸入參數sessionagent_token

close_session

Close the session

End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten.

輸入參數sessionagent_token

session_status

Session status

The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and expires_at (Unix seconds), run (compilations so far: event times restart at each), level and levels (null in free mode), capture ({id, kind, state} of the session's capture, logic or analog, or null). Not reported to the human's journal.

輸入參數sessionagent_token

submit_answer

Submit an answer

Challenge mode: propose `value` as the answer of the current level's test `test` (an answer test of the level's brief). One answer per second at most. The hub checks it and returns {test, ok}; the verdict is also shown in the bench. For a hint, ask the visitor to reveal one in the bench.

輸入參數test必填value必填sessionagent_token

next_level

Next level

Challenge mode: move to the next level, as the bench's "Next level" button, and only when it would be offered: every test of the current level passed and a next level exists. Returns {level, levels}, the new level (index); session_status's level changes with the bench's next state. No level skipping.

輸入參數sessionagent_token

capture_logic

Capture logic signals

Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms (1 to 10 000 ms). In the browser's simulation, in simulated time; during the session's turn on a real bench, at the bench's logic analyser, in real time (no browser or running simulation needed then). trigger {pin, edge}: pin among pins, edge rising, falling or any; the recording then lasts wait_ms + duration_ms (10 000 ms at most) and keeps pre_ms (0 to wait_ms) before the first matching edge within wait_ms and duration_ms after it; with no such edge, the whole recording. Read the result with read_capture, decode it with decode_capture.

輸入參數pinspre_mssessiontriggerwait_msagent_tokenduration_ms

capture_analog

Capture analog signals

Sample the voltage of 1 to 4 board pins (the board's own numbers: Nano A0-A7 = 14-21, Uno A0-A5 = 14-19, Mega A0-A15 = 54-69; by default the setup's scope probes) at rate_hz (100 to 10 000) for duration_ms (1 to 10 000 simulated ms), 200 000 samples at most in all. An ADC input reads the voltage the circuit applies; any other pin, its logic level times the supply (PWM shows as a square wave). Simulation only: refused during a turn on a real bench, whose analyser has no analog channel. Read the result with read_capture.

輸入參數pinsrate_hzsessionagent_tokenduration_ms

read_capture

Read a capture

State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin and, for a logic capture, the edges [t_us, pin, v], 2000 from offset; for an analog one, rate_hz and the samples, rows [mv_1, ...] in the order of pins (row k at k / rate_hz), 2000 rows from offset. next: the following offset, or null. t0_ms: the first sample on the session's clock (ms since the simulation's launch, or since the start of the turn on a real bench), null when unknown; t_us and rows count from the capture's start. format="png": the same without edges or samples, plus a chart of the signals as an image (from_ms and to_ms, from the capture's start, to zoom; 4 per minute).

輸入參數to_msformatoffsetcapture必填from_mssessionagent_token

read_setup

Read a setup

A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit), probes, levels (without their hints: hints come through read_simulation as the visitor reveals them). Plus, when it exists, schema.png, the starting circuit as the editor draws it, as an image.

輸入參數id必填

push_circuit

Push a circuit

Free mode only: replace the circuit in the human's browser (the simulation stops). components: [{type, id, properties, x?, y?}] (the board is not a component), wires: [{id, start: {componentId, pinName}, end: {...}, color?, waypoints?: [{x, y}] (the wire's route, 16 points at most)}], in the shape of the setup sheet's circuit; 40 components, 120 wires, 48 KiB. The editor checks types and pins: read the outcome with read_simulation (circuit, circuit_error). 6 per minute.

輸入參數wires必填sessioncomponents必填agent_token

bench_snapshot

Bench photo

During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the photo in ms since the start of the turn (null when unknown). One every 2 seconds.

輸入參數sessionagent_token

spec_draft

Draft a project spec

Draft the specification of the visitor's own project with Picodev's interview: you ask the visitor, this tool says what to ask next and makes the PDF. Nothing is sent and nothing is kept. Call it with the sections written so far (none at first). sections: {id: text in simple Markdown}, ids envelope, fonctionPrincipale, fonctions, alimentation, format, environnement, production, preferences, 4000 characters at most each. sections.contact, optional: the contact details the visitor wants printed at the end of the document (1000 characters at most; not part of the interview's progress). language: fr or en, the one the visitor answers in (headings, look_for and questions, the PDF). pdf=true: also the PDF, with Picodev Lab's template; requires title (one line). figures, with pdf=true, optional: the drawings the visitor approved, 3 at most, each {section (a section id), caption (one line), type (png or svg), data (base 64, 200 KiB at most decoded)}, placed after their section's text; an SVG loads nothing (no script, no DTD, href # or data:image/ only). Returns {rules (how to run the interview: follow them), sections [{id, heading, required, state (empty, thin, filled), look_for and questions while not filled}], next (the section to ask about, or null), ready (the four required sections filled: enough for Picodev to start), filename and pdf (base 64) with pdf=true}.

輸入參數pdftitlefigureslanguagesections

brief_submit

Send the spec to Picodev

Send Picodev the specification of the visitor's project, as a PDF, or only return its preview (send=false). sections: {id: text in simple Markdown}, ids envelope, fonctionPrincipale, fonctions, alimentation, format, environnement, production, preferences (the 8 sections of a product specification), 4000 characters at most each; a missing section reads "À préciser" (to be specified). send=false: preview, nothing is sent, contact and consent are not required. send=true: requires contact {name, email, company?, phone?} and consent=true. nda=true: the visitor wants a non-disclosure agreement first; without sections, only contact and title are sent, without PDF. session and agent_token, optional: the mail also says what the visitor did in the lab. language: fr or en, the PDF's headings. sections.contact and figures: as for spec_draft (refused with nda=true, as sections). Write the sections with spec_draft first. Before passing consent=true, show the visitor the consent text in the visitor's language, and wait until they accept it. In French: "J'accepte que mes coordonnées et la description de mon projet soient envoyées à Picodev par courriel, pour qu'ils me répondent. Picodev les garde 3 ans après le dernier échange et ne les utilise pour rien d'autre. Détails : lab.picodev.fr/confidentialite" In English: "I agree that my contact details and the description of my project are sent to Picodev by e-mail, so that they can answer me. Picodev keeps them for 3 years after our last exchange and uses them for nothing else. Details: lab.picodev.fr/en/privacy" Returns {sent, filename, pdf (base 64, absent with nda), missing (empty or too short sections), next (a sentence for the visitor, to say in their language)}}: write the PDF on the visitor's machine.

輸入參數ndasendtitle必填consentcontactfiguressessionlanguagesectionsagent_token

request_meeting

Request a meeting with Picodev

Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wants to do, where they stand, what they did in the lab. availabilities: 1 to 10 slots {from, to}, ISO 8601 dates with a time zone, within the next 60 days; or {text}, one sentence ("Tuesday mornings"). Requires consent=true. session and agent_token, optional: the mail also says what the visitor did in the lab. Before passing consent=true, show the visitor the consent text in the visitor's language, and wait until they accept it. In French: "J'accepte que mes coordonnées et la description de mon projet soient envoyées à Picodev par courriel, pour qu'ils me répondent. Picodev les garde 3 ans après le dernier échange et ne les utilise pour rien d'autre. Détails : lab.picodev.fr/confidentialite" In English: "I agree that my contact details and the description of my project are sent to Picodev by e-mail, so that they can answer me. Picodev keeps them for 3 years after our last exchange and uses them for nothing else. Details: lab.picodev.fr/en/privacy" Returns {sent, next}: Picodev answers by e-mail to confirm a slot.

輸入參數consent必填contact必填context必填sessionagent_tokenavailabilities必填

版本歷史

3
  1. v0.11.0最新Oct 23, 2026
  2. v0.10.0Oct 23, 2026
  3. v0.9.1Oct 21, 2026

評分

已滿足適用檢查項的 75%

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

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分

    請宣告包含 README 的 GitHub 儲存庫,或在 OAuth 受保護資源後設資料中提供 resource_documentation。

  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。