Soma
ai.dinglebear由 dinglebear.ai 发布v0.10.0更新于 Oct 24, 2026
RMCP runtime for provider-backed agents with CLI, REST, HTTP MCP, plugins, and scaffold support.
发布方自己的服务:Tailscale RMCP
概览
Soma 是一个本地 Rust 运行时,只暴露一个精简的 MCP 工具,让助手通过 stdio 或 HTTP 调用内置动作和放入的 provider 工具。
- 可以做什么
- 通过带 action 参数的单一 soma 工具调用 greet、echo、status 等内置动作,provider 增多时工具列表仍保持精简。加载 JSON、TypeScript、Python、WASM、Markdown、OpenAPI 或上游 MCP 等来源的即插即用 provider,并通过同一分发路径调用其工具。查看和管理 Python provider 的环境、worker 与代际,包括清理、修复、更新、取消、重置和回滚动作。脚手架生成重命名后的项目仓库,包含各自的 crate 名称、端口、插件和发布元数据。
- 适用场景
- 适合希望以尽量少的自定义 Rust 上线新 agent 能力,或在本地以 stdio 运行由 provider 驱动的 agent 运行时的场景。也适合希望用单个二进制把同一批 provider 投射到 MCP、CLI、REST 和生成文档的团队。
- 运行要求
- 以本地进程方式通过 npx 或 Docker 运行,或用 Cargo 构建原生二进制。npm 启动器会下载 Linux/x64 或 Windows/x64 发布包,并需要 GitHub CLI 2.68 或更高版本验证来源。可选配置包括 SOMA_API_KEY、SOMA_API_URL、SOMA_PROVIDER_DIR 和 SOMA_HOME;HTTP 模式还需主机、端口、令牌和 OAuth 相关变量。
安装
在 SourceWeft 中
- 打开 控制台中的 Soma,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Soma
RMCP runtime for provider-backed agents with CLI, REST, HTTP MCP, plugins, and scaffold support.
[Docs]
API docs — rustdoc for every
workspace crate plus the Redoc-rendered OpenAPI reference, deployed to GitHub
Pages from main.
Soma is a batteries-included server runtime and shipping binary for bringing new agent capabilities online with as little custom Rust as possible. It locks in the production patterns that every server in the family keeps rediscovering: one compact MCP tool, stdio and Streamable HTTP transports, CLI parity, direct REST routes, auth/OAuth, observability, plugin packaging, web fallback, Docker/runtime samples, generated contracts, and release automation.
The repository can still scaffold a renamed project, but Soma is now a shipped
runtime first. The default product path is to run soma in an explicit mode,
drop provider files into providers/ (or point SOMA_PROVIDER_DIR
elsewhere), and let the provider registry project those capabilities across MCP,
CLI, REST, OpenAPI, Palette summaries, generated docs, and plugin metadata.
Provider manifests also carry MCP-native prompt, resource, task, and elicitation
metadata for the registry contract. Scaffolding is the path for creating a new
distributable repo with the same locked-in runtime.
30-second path: install the soma binary -> soma status ->
npx -y @dinglebear/soma mcp from an MCP client -> call the soma MCP tool through
tools/call with {"action":"status"}.
Status: production RMCP runtime. Write-capable provider actions are allowed only when the provider declares them and destructive actions are gated.
Not for: an unauthenticated public gateway, a replacement for upstream service authorization, arbitrary untrusted code execution, or a multi-tenant security boundary by itself.
Contents
- Naming
- Capabilities And Boundaries
- Install
- Quickstart
- Client Configuration
- Runtime Surfaces
- MCP Tool Reference
- CLI Reference
- Configuration
- Authentication
- Safety And Trust Model
- Architecture
- Distribution Contract
- Development
- Verification
- Deployment
- Troubleshooting
- Related Servers
- Documentation
- License
Naming
Soma is the runtime product first and the template/export source second.
Generated projects replace these names during scaffold post-processing, but the
shipped soma command is the source of truth for product behavior.
Capabilities And Boundaries
Batteries Included
- One compact MCP service tool (
soma) withactiondispatch, so agent tool lists stay small even as provider catalogs grow. - One canonical binary:
somawith explicitserve,mcp, and CLI modes for REST API, Streamable HTTP MCP, stdio MCP, optional web UI, and local actions. - Dynamic provider loading from
.json,.ts,.py,.wasm, and.mdfiles, plus native Rust providers and upstream MCP/OpenAPI provider kinds. A structuredproviders/{tools,prompts,resources}/layout is supported alongside root-level files, including path-derived MCP resources (static files and dynamic.tsreaders) with a path-traversal trust boundary. - Provider manifest contracts for tools, prompts, resources, tasks, elicitation forms, env requirements, capability grants, and surface overlays.
- Shared validation, destructive-action confirmation, auth/scope enforcement, response limits, redaction, logging, metrics, generated OpenAPI, generated provider surface docs, plugin manifests, setup, doctor, and release tooling.
Soma owns the runtime projection, validation, auth policy, packaging, generated metadata, and scaffold automation. Provider code owns service-specific behavior and credentials. Upstream services own their own authorization and data model. Soma deliberately refuses to make credentials part of tool-call input and does not turn provider manifests into an unrestricted remote execution boundary.
Install
Use the npm launcher when an MCP client expects an npx command. During
postinstall, the package downloads the matching Linux/x64 or Windows/x64
release archive, verifies its SHA256SUMS entry and GitHub build attestation,
and installs the native binary inside the package. GitHub CLI 2.68 or newer is
required for provenance verification.
Use Cargo while developing the repo:
Release builds publish GitHub Release binaries, Docker/OCI metadata, the
@dinglebear/soma npm launcher, MCP registry metadata, and plugin package files from
the same release component.
Product Profiles
Choose the amount of surface area you want without changing the provider authoring model.
Lower-level Cargo features are available when you need a custom shape:
Quickstart
Run the product as-is:
Useful smoke checks:
Call the MCP endpoint directly:
Drop In A Provider
The fastest path for a new server is provider-first. Add a provider manifest or
module to providers/, then run the same binary. Use SOMA_PROVIDER_DIR
when the provider catalog should live outside the working directory.
Call it through the dynamic CLI surface:
Run the server and call the same provider over REST and MCP:
Plain Python functions can also be dropped directly into providers/:
When TOOLS is absent, public functions defined in the module become tools.
Sync and async functions are supported, and common Python type annotations are
converted into input schemas.
Python provider files are trusted code. Soma imports them during provider catalog refresh to discover tools, then executes tool calls in a sidecar with a cleared environment plus only declared provider/tool env values. Catalog import does not receive provider env; read secrets inside tool functions, not at module import time.
Provider manifests can declare:
- tools/actions exposed through MCP by default and through CLI/REST when their overlays opt in
- MCP-native prompt, resource, task, and elicitation metadata for the provider registry contract
- required environment variables and redaction rules
- filesystem, network, browser, terminal, GitHub, and env capability grants
- limits, destructive-action metadata, examples, generated docs, plugin, and UI metadata
Supported provider kinds are static-rust, openapi, ai-sdk, wasm, mcp,
python, langchain, and llamaindex. See
docs/specs/dynamic-provider-runtime.md,
docs/contracts/provider-manifest.schema.json,
and docs/generated/provider-surfaces.md.
Scaffold A New Project
Use cargo xtask scaffold when the provider-first path needs to become a new
repository with its own crate names, binary names, ports, plugin package,
Docker metadata, release metadata, and docs. It can plan without touching files,
generate with cargo-generate plus the Rust post-processor, write
docs/scaffold-report.md, and verify the generated export shape.
Plan from a short service name:
Plan from MCP scaffold_intent JSON:
Generate into an output parent directory:
Verify an existing generated project:
Print a path-aware follow-up plan for adapting the generated stub:
Materialize starter artifacts from an action manifest:
Add starter action snippets:
Example action manifest:
Use:
--category upstream-clientfor a lean local adapter around an existing API.--category application-platformfor API + CLI + MCP + web defaults.--no-cargo-checkonly when you need fast static verification while iterating.
See docs/SCAFFOLD.md, docs/CARGO_GENERATE.md, and docs/contracts/scaffold-intent.schema.json for the full scaffold contract.
Architecture
The runtime keeps product behavior behind the provider registry. Every external surface is a thin parser/formatter around the same provider snapshot and service runtime, so dropping a provider does not require hand-editing MCP, CLI, REST, OpenAPI, plugin, or docs code.
The thin-shim rule is strict:
- Parse input at the surface.
- Call the provider registry or service runtime.
- Return or print the result.
Do not put business rules in CLI, MCP, REST handlers, or the binary entrypoint
(apps/soma/src/bin/soma.rs / apps/soma/src/bootstrap.rs).
Runtime Surfaces
The canonical binary can run the whole app from one executable:
Local adapter mode is optimized for plugin/local use:
Every explicit runtime mode loads the provider registry. File providers default
to ./providers and can be moved with SOMA_PROVIDER_DIR. CLI startup, MCP
dispatch, and dynamic REST routes refresh file providers before execution, then
enforce the active provider snapshot's schema, surface, scope, capability,
destructive-action, and response-limit rules.
HTTP routes in the server profile:
REST is direct-route-only: there is no /v1/soma action envelope. MCP remains one soma tool with an action argument.
MCP Tool Reference
The runtime exposes one compact MCP tool, soma, with an action argument.
Built-in actions and dropped provider tools share that same dispatch path. This
keeps MCP discovery small while allowing the provider catalog to grow behind the
single tool.
Python provider lifecycle administration is exposed through the same compact tool with these explicit actions:
- environment cache:
python_environment_status,python_environment_prune_plan,python_environment_prune,python_environment_repair, andpython_environment_update; - persistent workers:
python_worker_status,python_worker_cancel, andpython_worker_reset; - provider generations:
python_generation_statusandpython_generation_rollback; - Python-to-component graduation:
python_graduation_statusand confirmedpython_graduation_apply.
Built-in business actions keep MCP + CLI + REST parity unless there is a
protocol reason they cannot. elicit_name and scaffold_intent are MCP-only
because they rely on MCP elicitation. serve, mcp, doctor, watch, setup,
and package are CLI operator commands, not business actions.
Dropped provider tools are MCP-enabled by default and REST-executable through
POST /v1/tools/{action} unless the tool explicitly sets
rest.enabled=false. A rest overlay can add a custom route, method, and
OpenAPI metadata; the generic route remains the web/adapter-safe execution
shape. CLI exposure is opt-in through each tool's cli overlay. Provider
prompts, resources, tasks, and elicitation forms are part of the provider
manifest contract and registry index; they are not mirrored to CLI or REST by
default.
CLI Reference
The soma binary exposes operator commands and provider-backed actions through
the same registry snapshot used by MCP:
Provider tools opt in to CLI exposure with a cli overlay. Dynamic CLI flags
are derived from the provider input schema, so the generated provider catalogs
remain the source of truth for current action shapes.
Safety And Trust Model
MCP callers never provide API keys, OAuth secrets, bearer tokens, passwords, or other credentials in tool arguments. Credentials live in environment variables, config files, appdata, or the upstream provider runtime.
Provider manifests are validated before dispatch. The registry enforces surface opt-ins, JSON Schema input validation, auth scope, declared host capabilities, destructive-action confirmation, response-size limits, and structured provider errors. Python, LangChain, LlamaIndex, and TypeScript provider files are trusted local code; WASM providers run through the sandboxed WASM provider path; OpenAPI and MCP providers delegate trust to their configured upstream service.
Authentication
The HTTP server supports four auth policies:
The startup guard refuses non-loopback unauthenticated binds unless bearer,
OAuth, or trusted-gateway mode is configured. /health, /readyz, /status,
and /openapi.json are public by design and return only safe runtime metadata.
See docs/AUTH.md for the detailed auth model.
Configuration
Values load from config.toml, local appdata files, and environment variables;
explicit environment variables win. The built-in offline provider works without
real credentials, but generated projects should mark their real
upstream/platform credentials as required.
Keep SOMA_MCP_TRACE_HEADERS=off unless the server is bound to loopback or a
trusted gateway strips or overwrites trace headers from untrusted clients.
Bearer/OAuth authentication alone is not that trust boundary. See
docs/TRACE_CONTEXT.md for the complete inbound-only
trace-header contract.
Samples:
- .env.example for secrets, URLs, and runtime env.
- config.soma.toml for non-secret defaults.
Provider callback paths default to /auth/google/callback,
/auth/authelia/callback, and /auth/github/callback; callback and scope
overrides are listed in docs/ENV.md. GitHub OAuth Apps do not
provide an upstream refresh token, so GitHub-authenticated sessions do not
receive a local refresh token and must sign in again after their access token
expires. See docs/AUTH.md for provider selection and security
details.
Development
cargo xtask ci runs the main local CI sequence. Optional tools such as
cargo-nextest, taplo, and cargo-audit are used when installed.
Workspace layout
41 cargo members:
rmcp is pinned exactly — rmcp = { version = "=3.1.0", default-features = false }
in [workspace.dependencies], duplicated on the rmcp-client alias entry
because TOML cannot cross-reference. Bump both together.
[workspace.package] is the source of truth for Rust edition and MSRV: new
members inherit edition = "2024" and rust-version = "1.97.1" with
edition.workspace = true and rust-version.workspace = true. Shared crates
also inherit workspace lints so architecture and module-layout policy stays
consistent across the fleet.
Client Configuration
Streamable HTTP:
Stdio:
For generated projects, replace soma, SOMA_*, tool names, scopes,
and paths with the generated service names.
Plugin Surfaces
The repo ships one shared Soma plugin package under plugins/soma for Claude Code, Codex, and Gemini surfaces. Plugin manifests are versionless; release tooling derives version identity from git state. The plugin package can use the local stdio adapter and includes setup/doctor support for appdata and environment files.
Primary docs:
- docs/PLUGINS.md
- plugins/soma/.codex-plugin/README.md
- plugins/soma/skills/soma/SKILL.md
- plugins/soma/skills/scaffold-project/SKILL.md
Distribution Contract
The soma release component is defined in
release/components.toml. Version-bearing artifacts
must stay aligned across the Rust package, Cargo.lock, server.json, the npm
package, generated OpenAPI metadata, OCI image identifiers, and the changelog.
Plugin manifests stay versionless. Marketplace and plugin release identity is
derived from git/package metadata, while server.json and generated provider
surface docs describe the currently shipped runtime surface. Run
cargo xtask check-version-sync, cargo xtask generate-provider-surfaces --check,
and cargo xtask check-docs before publishing release metadata.
Web UI
The web feature serves the static export bundled by soma-web. Editable
frontend source lives in apps/web, and cargo xtask sync-web-source
copies that source into the Rust crate bundle.
Useful commands:
Generated projects that do not need a human UI should use local-adapter,
server, or a custom feature set without web.
Deployment
The full platform profile is designed for one deployable soma binary. The repository
also includes Docker and Compose samples:
When adapting a generated project, verify the canonical binary name, exposed port, healthcheck port, image labels, service user/group, data volume, and required environment variables. The scaffold verifier catches several scaffold-only artifacts, but deployment files still need service-specific review before publishing an image.
When Drop-In Providers Are Not Enough
Most new capabilities should start as provider files. Reach for native Rust or a scaffolded product when you need a reusable crate boundary, richer service state, custom clients, background jobs, a dedicated package identity, or hand-tuned transport behavior.
For a generated product, start by printing the profile-aware checklist:
Then generate reviewable starter artifacts for the repetitive action wiring:
This writes docs/action-starters/ in the generated project with snippets for
action metadata, MCP dispatch, CLI variants, service stubs, and test coverage.
- Replace the stub client in
crates/soma/client/src/client.rsonly when the provider file path is not enough. - Put domain logic in
crates/soma/application/src/service.rsor focused service modules. - Register native provider/action metadata so MCP, CLI, REST, docs, and plugins stay registry-driven.
- Regenerate MCP schema docs, provider surface docs, and OpenAPI so generated surfaces reflect the provider registry.
- Add REST handlers only for infrastructure routes; business actions should stay registry-backed direct routes.
- Update config fields and env prefixes in
crates/soma/config/src/config.rs. - Update
.env.example,config.soma.toml, plugin options, and setup mappings. - Update
server.json, plugin metadata, repository URLs, Docker labels, and release metadata. - Add tests for MCP dispatch, CLI parsing, REST routes, provider loading, and service behavior.
- For generated/exported projects, run scaffold verification plus the project's local quality gates.
For public repositories, also review tracked docs, generated metadata, CI runner configuration, and secret-scanning allowlists before publishing.
Troubleshooting
soma doctorchecks local configuration, appdata, and connectivity.soma providers validateconfirms provider manifests and compiled schemas against the loaded, live registry.soma providers inspectshows provider surfaces, capability posture, and generated action inventory.soma providers list|lint|statusinspect drop-in provider files on disk without loading the registry or executing any handler — safe to run before the runtime touches TS/WASM/MCP/OpenAPI providers. Seedocs/PROVIDERS.md.- Stdio mode keeps logs quiet so JSON-RPC is not corrupted; use HTTP mode or file logs when investigating noisy startup failures.
- If generated docs drift, run
cargo xtask generate-provider-surfaces --writeand then re-run the--checkcommand.
Related Servers
- runifi - UniFi controller REST API bridge.
- rtailscale - Tailscale API bridge for devices, users, and tailnet operations.
- unraid - Unraid monorepo: Python and Rust GraphQL MCP servers plus Unraid plugins.
- rapprise - Apprise notification fan-out bridge for many delivery backends.
- rgotify - Gotify push notification bridge for sends, messages, apps, and clients.
- rarcane - Arcane Docker management bridge for containers and related resources.
- yarr - Media-stack bridge for Sonarr, Radarr, Prowlarr, Plex, and related services.
- rytdl - Media download and metadata workflow server.
- synapse - Local Synapse workflow server for scout and flux actions.
- cortex - Syslog and homelab log aggregation MCP server.
- axon - RAG, crawl, scrape, extract, and semantic search project.
- labby - Homelab control plane and MCP gateway project.
- lumen - Local semantic code search MCP server.
Documentation
Verification
Product runtime gates:
Scaffold/template gates are a separate lane. Run them when a change touches the scaffold contract, cargo-generate post-processing, or generated-project output:
Use targeted checks while iterating, then run the broader product and affected scaffold gates before release.
License
Original Dinglebear-authored portions of this project are licensed under AGPL-3.0-only. Separate commercial licensing is available for organizations that need terms outside the AGPL. Third-party material remains under its original license. See LICENSING.md.
来源:README.md,提交 c3f10e8
工具
0版本历史
1- v0.10.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Dinglebear 集成
Tailscale RMCP
ai.dinglebear官方发布者
把 Tailscale 网络接入助手:列出设备、查看路由、DNS、ACL、密钥与用户,并可授权或删除设备。
Yarr MCP
ai.dinglebear
MCP 与 CLI 服务器,让助手查询并控制自建的 Sonarr、Radarr、Prowlarr、Plex、Jellyfin 等媒体服务。
Yarr MCP
ai.dinglebear
一个 MCP 服务器兼 CLI,为助手提供统一工具面,用于查询和操控 Sonarr、Radarr、Plex 等自建媒体服务。

Unraid MCP
ai.dinglebear
Python 版 MCP 服务器,让助手通过 Unraid 的 GraphQL API 查询和管理 Unraid 服务器。
Labby
ai.dinglebear
Labby 是一个本地运行的 Rust MCP 网关,提供 Code Mode、认证、安装配置、日志、CLI、HTTP API 和运维网页界面,通过 npx 启动。