
Sapiom
io.github.sapiomPublished by GitHub account sapiomv0.20.0Updated Nov 7, 2026
Local Sapiom developer MCP for authoring, testing, deploying, and inspecting agents.
Overview
Local Sapiom developer server that lets a coding agent scaffold, test, deploy, run and inspect Sapiom agents, and publish web apps to sandbox or App Link URLs.
- What you can do
- Scaffold, typecheck and run agent projects locally with stubbed capabilities
- Link, clone, deploy, run, inspect and signal cloud agent executions
- Create, inspect and cancel triggers (cron, one-off, event, webhook) and rotate webhook secrets
- Configure and validate sandbox resources, then deploy a preview URL or publish a durable App Link
- List, adjust and delete App Links, including webhook and spend-cap settings
- Draw an agent map of systems, agents, steps and code-proven edges
- When to use it
- Useful when you build or operate Sapiom agents or Sapiom-hosted web apps from a coding agent and want the author-test-deploy-inspect loop in one place. Not needed if you only want Sapiom capability tools such as scrape or search, which live elsewhere.
- Requirements
- Runs locally over stdio via npx, so Node.js and network access are needed. Networked tools require a Sapiom API key obtained through a browser login and cached in a credentials file; the environment defaults to production and can be changed with SAPIOM_ENVIRONMENT. Local authoring tools need no Sapiom authentication.
Installation
In SourceWeft
- Open Sapiom in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@sapiom/mcp
The local developer MCP server for Sapiom. It runs on your machine over
stdio under the server name sapiom-dev. Today it gives a coding agent the
tools to scaffold, test, deploy, and inspect Sapiom agents, and to put a web app
behind a live sandbox URL or a durable App Link; the namespace leaves room for
other developer tooling later.
Not the capability surface. This is not the remote "Sapiom" MCP (the hosted connector with
sapiom_sandbox_*, scrape, search, … capability tools).sapiom-devexposes no direct capability tools. Its local check and Local Run path uses stubbed capabilities without Sapiom capability spend; deploys, cloud builds, production runs, signals, and schedules operate Sapiom cloud state and may be metered. See the two Sapiom MCP servers for which to use when.
Install
No global install — run it on demand with npx:
In Claude Code:
Configuration
The server targets the production environment by default. Override it with the
SAPIOM_ENVIRONMENT environment variable:
production(aliasprod) →app.sapiom.ai/api.sapiom.ai— the default.staging(aliasdev) →app.sapiom.dev/api.sapiom.dev.
Both resolve from built-in presets, so no config file is required. A custom
target can be defined in ~/.sapiom/credentials.json (the server prints the
expected shape if it encounters an unknown environment name).
The API key only travels over https://, or plain http:// to a loopback host
(localhost, *.localhost, 127.0.0.1, [::1]). A custom target on any other
http:// host is refused before the request is sent. On a trusted private
network, set SAPIOM_ALLOW_INSECURE_HTTP=1 in the server's env.
Authentication
The first networked call (link, deploy, run, inspect, signal) needs a
Sapiom API key. Run sapiom_authenticate and the server opens a browser
login flow, then caches the resulting key per environment in
~/.sapiom/credentials.json. After that, tools work without re-authenticating.
sapiom_status reports who you're authenticated as; sapiom_logout clears the
cached credentials.
The local authoring tools (scaffold, check, run_local) need no Sapiom
authentication. scaffold may query npm for current dependency versions;
check imports the definition; and run_local executes the author's ordinary
local code. Only ctx.sapiom.* calls are replaced by stubs, so direct network,
filesystem, environment, and process effects in author code remain real.
Tools
A typical loop: scaffold → write step code → run_local until green → link
→ deploy → run → inspect.
For a web app rather than an agent: sandbox_configure → sandbox_preview
while iterating (a throwaway URL that dies with the sandbox) → app_publish
once the link needs to be permanent or shared. app_publish reads the same
sapiom.json sandbox resource, uploads the source as a stored text-only bundle
(≤ 10 MiB), and returns a durable https://apps.sapiom.ai/{org}/{slug} URL that
wakes the app on demand — republishing the same slug updates it in place. See
the sapiom-sandbox-preview skill for the routing rules.
Once a link exists, app_list, app_settings and app_delete manage it without
leaving the terminal. Webhooks are off by default: app_settings { slug, webhooksEnabled: true } turns them on, after which third parties POST to
https://apps.sapiom.ai/{org}/{slug}/hook/<path> (the /hook prefix is
stripped and the body forwarded byte-exact, so Slack/Stripe/GitHub signature
checks run inside the app). These settings need the org.write permission —
publish authority alone is not enough — and a refusal comes back as a message
naming the permission and the fields, for the agent to relay rather than retry.
The agent map
sapiom_dev_map returns the map Agent Studio draws, computed from code on every
call; nothing about agents or edges is stored. Pass a project folder (root, default the working
directory) and optionally a git ref (HEAD, a branch, a commit) to draw that
version:
The scan finds every folder with a sapiom.json or a defineAgent and reads:
- Edges, agent to agent, each with the file and line that proves it:
agents.run/agents.launch(launch),schedules.createon another agent (timer), andevents.emitmatched to the agents an event type triggers (event). A target counts when the code makes it knowable: a literal, a const (local or imported), every value of a const map indexed at run time, a zod.default()on the input field the call reads, or aprocess.envkey set insapiom.json. Anything else is listed underunresolved. - Systems: connected components over those edges. Agents that only share a
vault key, database or connector are not joined; the shared resource shows in
each agent's
sharedlist. Name a system in a committed.sapiom/map.json:{ "systems": [{ "agent": "intake", "name": "Support desk" }] }. - Steps from
agents check(needs the agent's dependencies installed). - Triggers and deploy state from the signed-in account, plus a
fleet.json's declared triggers. Signed out,platformsays so and the map still draws. changedSinceRef: the agent's folder differs fromref(fromHEADwhen drawing the working copy).
To map agents you describe yourself, without scanning, pass agents:
Each agent takes slug and optionally path, description, deployed,
steps ({ entry, steps: [{ id }], transitions: [{ from, to, kind }] }),
calls ({ to, kind: "launch" | "signal" | "timer", evidence? }), emits,
triggers and resources. The same systems rule applies.
Labels. Signed in, the tool asks Jev (jev-1.13.0, one batched
decisions.evaluate call) for each described agent's role (intake, worker,
orchestrator, reporter, monitor or utility) and for the label of each launch or
event edge (hands work to, feeds data to or monitors). A label appears only when
its probability p is at least 0.8. Answers are cached in
<root>/.sapiom/cache/map-labels.json (ignored by git from inside the folder;
in memory for a described map), keyed by a hash of the question's facts, so an
unchanged agent is never re-asked and its label never flips. In a scanned
project, when an agent changes, the label it showed stays unless the new answer
differs and clears 0.8.
Signed out, with platform: false, or when Jev fails or takes over 5 s, the map
comes back with labels: "unavailable" and is otherwise the same.
How capabilities fit in
Agents authored here call Sapiom capabilities — sandboxes, repositories,
coding agents, search, storage, content generation — through
@sapiom/tools (ctx.sapiom.*). run_local resolves those calls
from stubs; deploy and production run cross into authenticated cloud operations
and can be metered. This MCP never grows a per-capability tool of its own —
capabilities live in
@sapiom/tools and the remote sapiom MCP. See
the positioning doc for the full policy.
Sending feedback
sapiom_send_feedback relays a user's product feedback (a bug, a rough edge, a
feature request) to the Sapiom team. The agent sends only what the user said;
the server attaches package version, platform, arch, node version, environment
and a timestamp itself, so the model never has to read those off the machine.
A host embedding this server can advertise its own version with
SAPIOM_HARNESS_VERSION — it rides along as clientMeta.harnessVersion,
which is what makes "which build is this user on" answerable during triage. The
field is omitted entirely when the variable is unset, never filled with a
placeholder. @sapiom/harness sets it automatically.
Usage analytics
The server emits anonymous usage analytics (one tool.call event per tool
invocation: tool name, arguments, duration, ok/error class) via
@sapiom/analytics-core to the hosted Sapiom collector
by default. Opt out at any time with SAPIOM_TELEMETRY_DISABLED=1 or
DO_NOT_TRACK=1 — either makes the emitter a complete no-op (nothing is sent,
nothing is written to disk). Local-only tools (sapiom_dev_agents_scaffold,
sapiom_dev_agents_check, sapiom_dev_agents_run_local) report only each
argument's name and size, never its value. SAPIOM_ANALYTICS_ENDPOINT overrides the
destination. Telemetry is a synchronous in-memory enqueue that never throws,
never blocks a tool call, and can never change a tool result.
License
MIT
Source: packages/mcp/README.md at commit bc010c4
Tools
0Version history
3- v0.20.0LatestOct 9, 2026
- v0.19.2Oct 6, 2026
- v0.16.0Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts