{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_n3scny7r9txs","handle":"picodev-lab","url":"https://wellknown.network/agents/picodev-lab","links":{"self":"https://wellknown.network/agents/picodev-lab/record.json","html":"https://wellknown.network/agents/picodev-lab","markdown":"https://wellknown.network/agents/picodev-lab/record.md","api":"https://wellknown.network/api/v1/agents/picodev-lab","status":"https://wellknown.network/api/v1/agents/picodev-lab/status","claim":"https://wellknown.network/agents/picodev-lab/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/picodev-lab/claim.json","badge":"https://wellknown.network/agents/picodev-lab/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/picodev-lab/history","tools":"https://wellknown.network/api/v1/agents/picodev-lab/tools"},"ard":{"identifier":"urn:air:lab.picodev.fr:server:picodev-lab","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Picodev Lab","summary":"Arduino benches simulated in the browser: sessions, sketch push, simulation, tests, challenges.","description":"Arduino benches simulated in the browser: sessions, sketch push, simulation, tests, challenges.","publisher":{"name":"PICODEV-SAS","url":null},"homepage":"https://lab.picodev.fr","repository":"https://github.com/PICODEV-SAS/picodev-lab-plugin","version":"0.9.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://lab.picodev.fr/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-21T17:34:51.619771Z","publishedAt":"2026-10-21T17:34:51.619771Z","registryName":"io.github.PICODEV-SAS/picodev-lab"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"infra.browser-automation","name":"Browser Automation","confidence":0.911,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.833,"provenance":"derived"},{"slug":"productivity.calendar","name":"Calendar & Scheduling","confidence":0.51,"provenance":"derived"},{"slug":"communication.chat","name":"Team Chat","confidence":0.51,"provenance":"derived"}],"categories":["communication","infra","productivity"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-24T08:27:05.026Z","lastProbedAt":"2026-10-24T08:27:05.026Z","statusComputedAt":"2026-10-24T08:30:11.304Z","reliability30d":{"probes":7,"successRate":1,"p50Ms":22,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":7,"ok":7,"authBoundaryOk":0,"serviceOk":7,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-24T08:27:05.026Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":36,"error":null,"detail":{"tools":[{"name":"decode_capture","description":"Decode a ready logic capture of the session (browser or bench). protocol \"uart\" with channels {rx} and options\n    {baud (300-1000000, 9600), bits (5-9, 8), par"},{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). `serial` is the full serial ou"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"submit_answer","description":"Challenge mode: propose `value` as the answer of the current level's test `test` (an answer test of the level's\n    brief). One answer per second at most. The h"},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"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\n    A0-A15 = 54-69; by default the setup's scope p"},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels (without their hints: hints come "},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"toolCount":23,"toolsHash":"29adfeeebe69eaa5689d137b6337d08e907f4c5fdb15816700c41f6534fcfa35","serverName":"picodev-lab-hub","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T01:23:32.335Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":24,"error":null,"detail":{"tools":[{"name":"decode_capture","description":"Decode a ready logic capture of the session (browser or bench). protocol \"uart\" with channels {rx} and options\n    {baud (300-1000000, 9600), bits (5-9, 8), par"},{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). `serial` is the full serial ou"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"submit_answer","description":"Challenge mode: propose `value` as the answer of the current level's test `test` (an answer test of the level's\n    brief). One answer per second at most. The h"},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"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\n    A0-A15 = 54-69; by default the setup's scope p"},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels (without their hints: hints come "},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"toolCount":23,"toolsHash":"29adfeeebe69eaa5689d137b6337d08e907f4c5fdb15816700c41f6534fcfa35","serverName":"picodev-lab-hub","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T18:26:56.363Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":28,"error":null,"detail":{"tools":[{"name":"decode_capture","description":"Decode a ready logic capture of the session (browser or bench). protocol \"uart\" with channels {rx} and options\n    {baud (300-1000000, 9600), bits (5-9, 8), par"},{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). `serial` is the full serial ou"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"submit_answer","description":"Challenge mode: propose `value` as the answer of the current level's test `test` (an answer test of the level's\n    brief). One answer per second at most. The h"},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"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\n    A0-A15 = 54-69; by default the setup's scope p"},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels (without their hints: hints come "},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"toolCount":23,"toolsHash":"e670f164a45ed027c0846ca3cdead93c9904f949229a60e5d23d2383f995192c","serverName":"picodev-lab-hub","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T11:26:40.123Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":18,"error":null,"detail":{"tools":[{"name":"decode_capture","description":"Decode a ready logic capture of the session (browser or bench). protocol \"uart\" with channels {rx} and options\n    {baud (300-1000000, 9600), bits (5-9, 8), par"},{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). In challenge mode: the level's"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"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\n    A0-A15 = 54-69; by default the setup's scope p"},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels. Plus, when it exists, schema.png"},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"toolCount":22,"toolsHash":"c2e40708900156fbe2e39160f5ca34a26b19e1915818bb750ae12d4b847d5716","serverName":"picodev-lab-hub","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T05:31:51.370Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":18,"error":null,"detail":{"tools":[{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). In challenge mode: the level's"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"Sample the voltage of 1 to 4 board pins (0-13 digital, 14-21 = A0-A7; by default the setup's scope probes) at\n    rate_hz (100 to 10 000) for duration_ms (1 to "},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels. Plus, when it exists, schema.png"},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"toolCount":21,"toolsHash":"c169fca744624b62efcc74c6106f57211fd7c3f1f18bfea97eee75f61bc540e3","serverName":"picodev-lab-hub","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T23:30:13.307Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":17,"error":null,"detail":{"tools":[{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). In challenge mode: the level's"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"Sample the voltage of 1 to 4 board pins (0-13 digital, 14-21 = A0-A7; by default the setup's scope probes) at\n    rate_hz (100 to 10 000) for duration_ms (1 to "},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels. Plus, when it exists, schema.png"},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"toolCount":21,"toolsHash":"c169fca744624b62efcc74c6106f57211fd7c3f1f18bfea97eee75f61bc540e3","serverName":"picodev-lab-hub","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T17:32:22.531Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":18,"error":null,"detail":{"tools":[{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). In challenge mode: the level's"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"Sample the voltage of 1 to 4 board pins (0-13 digital, 14-21 = A0-A7; by default the setup's scope probes) at\n    rate_hz (100 to 10 000) for duration_ms (1 to "},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels. Plus, when it exists, schema.png"},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"toolCount":21,"toolsHash":"c169fca744624b62efcc74c6106f57211fd7c3f1f18bfea97eee75f61bc540e3","serverName":"picodev-lab-hub","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}}],"tools":[{"name":"decode_capture","description":"Decode a ready logic capture of the session (browser or bench). protocol \"uart\" with channels {rx} and options\n    {baud (300-1000000, 9600), bits (5-9, 8), par"},{"name":"list_setups","description":"The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free,\n    challenge) and their benches by kind (status op"},{"name":"open_session","description":"Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."},{"name":"push_to_editor","description":"Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback\n    of push_program: use it only when the toolchai"},{"name":"push_program","description":"Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's\n    <sketch>.ino.hex) to the human's browser, which loads i"},{"name":"read_simulation","description":"Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms\n    (2000 at most). `serial` is the full serial ou"},{"name":"set_visibility","description":"Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."},{"name":"queue_join","description":"Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."},{"name":"queue_status","description":"The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."},{"name":"queue_leave","description":"Give back the place in the queue, or the turn if it has started."},{"name":"close_session","description":"End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."},{"name":"session_status","description":"The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at and "},{"name":"submit_answer","description":"Challenge mode: propose `value` as the answer of the current level's test `test` (an answer test of the level's\n    brief). One answer per second at most. The h"},{"name":"next_level","description":"Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered:\n    every test of the current level passed and a "},{"name":"capture_logic","description":"Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms\n    (1 to 10 000 ms). In the browser's simulation"},{"name":"capture_analog","description":"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\n    A0-A15 = 54-69; by default the setup's scope p"},{"name":"read_capture","description":"State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin\n    and, for a logic capture, the edges [t_us, pin,"},{"name":"read_setup","description":"A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit),\n    probes, levels (without their hints: hints come "},{"name":"push_circuit","description":"Free mode only: replace the circuit in the human's browser (the simulation stops). components:\n    [{type, id, properties, x?, y?}] (the board is not a componen"},{"name":"bench_snapshot","description":"During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the\n    photo in ms since the start of the turn (null whe"},{"name":"spec_draft","description":"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 i"},{"name":"brief_submit","description":"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 envelop"},{"name":"request_meeting","description":"Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor wa"}],"package":null,"toolSurface":{"id":"ts_43vpsbyf8qyk","endpointId":"ep_gwad9k2bw4nt","hash":"29adfeeebe69eaa5689d137b6337d08e907f4c5fdb15816700c41f6534fcfa35","toolCount":23,"serverName":"picodev-lab-hub","serverVersion":"","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-24T01:23:32.335Z","lastSeenAt":"2026-10-24T08:27:05.034Z","observations":2,"toolNames":["decode_capture","list_setups","open_session","push_to_editor","push_program","read_simulation","set_visibility","queue_join","queue_status","queue_leave","close_session","session_status","submit_answer","next_level","capture_logic","capture_analog","read_capture","read_setup","push_circuit","bench_snapshot","spec_draft","brief_submit","request_meeting"],"distinctSurfaces":4},"endpointFacts":[{"id":"ep_gwad9k2bw4nt","url":"https://lab.picodev.fr/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-24T01:23:32.362Z","auth":{"observedAt":"2026-10-24T01:23:32.378Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-24T01:23:32.426Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"lab.picodev.fr","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-10-14T00:39:42.000Z","validTo":"2027-01-12T00:39:41.000Z","daysToExpiry":79,"sanCount":1,"fingerprint256":"EF:9A:5F:13:B2:B2:93:31:F4:B0:4C:DD:95:7B:0A:45:8C:F5:95:66:42:97:8D:EE:DF:D9:34:D4:3B:C4:DD:99"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.PICODEV-SAS/picodev-lab","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.PICODEV-SAS%2Fpicodev-lab","firstSeenAt":"2026-10-22T17:19:08.280Z","fetchedAt":"2026-10-22T17:19:08.280Z","normalizedAt":"2026-10-22T17:19:08.280Z"}]},"firstSeenAt":"2026-10-22T17:19:08.280Z","updatedAt":"2026-10-24T08:31:47.584Z"}