Skip to main content
fracta config mcp is the entry point for catalog management and per-mode server wiring. It is part of the broader fracta config umbrella for project-config commands.

Command tree

The old fracta mcp <verb> form is preserved as a deprecation alias for one minor release — see fracta mcp (deprecated alias) for the remapping table and a sed one-liner.

fetch

Populates <root>/mcp-servers/ from a catalog source. Operators commit the result.

Pre-flight summary

Suppressed by --yes.

Last-source memoization

After a successful plain (non-merge) fetch, the source spec used is written to <root>/mcp-servers/.fracta-source. Subsequent fetch invocations without a positional argument default to that recorded value rather than the global default. To re-establish the canonical source:
--merge does NOT update .fracta-source — it’s a one-shot overlay.

list

Lists every MCP server in the local catalog, grouped by deployment mode.
If <root>/mcp-servers/ is missing or empty:
Default output (--target-deployment all):

--remote

Compares the local catalog against the canonical remote (github:darkquasar/fracta@main). Read-only — never writes to the project tree. Output uses catalog.yaml’s version: for the REMOTE column:
Offline network: degrades to "remote unavailable: <error>" on stderr and exits 0 with the local-only view.

inspect <server>

Full per-server metadata.

add <server>

Performs the per-mode hand-edits operators do today, deterministically and idempotently, after explaining what running/building/pulling will be needed. By default add operates on the surrounding fracta project (walks up for .fracta/) and derives the target mode from which scaffolds are enabled. To run outside a fracta project — adding a backend to a remote deployment from a non-project directory — supply --target-deployment plus the relevant standalone-mode path flag(s) listed below.

Per-mode write contract

All fracta.yaml and docker-compose.yml mutations are atomic, idempotent, and comment-preserving. Reads decode to *yaml.Node; writes round-trip through gopkg.in/yaml.v3; commits are temp+fsync+rename. add is a strict layer on top of fracta init --scaffold <mode>. It refuses to mutate a project that hasn’t scaffolded the chosen mode, with an explicit error pointing at the prereq command.

Rollback

For multi-file mutations (compose/k8s), each mutation writes a transient .bak immediately before applying, then removes it on success. On any failure, the rollback restores from .bak and removes newly-written files. Successful add leaves no .bak files.

Standalone mode

When any of --config, --compose-file, --k8s-manifest-dir, or --catalog-dir is supplied, add runs in standalone mode: no project walk-up happens, and the project’s scaffold state isn’t consulted. In standalone mode:
  • --target-deployment is required (no project state to infer from).
  • The relevant path flag for the chosen mode must be supplied:
  • The .env.example side-effect (compose mode) is dropped — the operator owns env-var declaration when running standalone.
Example: add fracta-test-server to a k8s deployment whose ConfigMap and manifests live in a separate directory:
Without any standalone flag, add falls back to the project-walk-up behaviour — useful when you’re inside a fracta project and want the default paths.

manifest <server>

Renders the deployment artifacts for an MCP backend from the catalog to stdout. Does not require a fracta project directory and does not write any files — pipe to kubectl apply -f -, paste into a compose file, or capture for review.

Output formats

Examples

Render a Deployment+Service for the bundled test server and apply it:
Render a docker-compose service block for inline pasting:
Render a fracta.yaml snippet to add to an existing project by hand:

When to use manifest vs add

If you find yourself piping manifest output into your editor repeatedly, that’s a sign add (or add with standalone flags) is the right tool.

tool

Per-tool enable/disable + policy inspection. See Gateway Tool Policy for the operator narrative.
enable / disable write to the registry store (postgres or sqlite, depending on the backend) — they’re the imperative override for individual tools. The declarative path is tool_policy: in fracta.yaml; see the gateway tool policy guide.

remove <server>

Reverse of add.
add then remove --yes returns the project byte-identical to pre-add state (modulo filesystem timestamps).

auth

Identical semantics to the old fracta mcp group; only the path moved and auth-status was renamed to status. See the auth reference page for full credential-store and OAuth-flow details.

The --config <yaml> flag (required for in-cluster OAuth)

fracta config mcp auth login and fracta config mcp auth export read the target server’s definition from a YAML file rather than introspecting a running gateway. Pass --config <path> to point them at one.
  • In deployments where the in-cluster gateway ConfigMap is the source of truth (Kubernetes, Docker Compose), the host’s fracta.yaml typically describes only the thin-client control-plane connection — it does NOT list the OAuth servers. Without --config, the CLI errors with server "<name>" not found in config.
  • The recommended pattern is a tiny throwaway <server>-login.yaml per server, describing only the OAuth endpoint shape (no token file paths). The CLI uses it to drive the OAuth dance; the tokens land in your OS keyring, and fracta config mcp auth export --format k8s-secret --config <server>-login.yaml renders them as a Kubernetes Secret you can apply.
See Reading Garden — Setup for an end-to-end worked example covering both Notion and Readwise.

Authoring contract

The catalog at <root>/mcp-servers/ is operator-owned, git-tracked configuration — first-class checked-in config, not a runtime cache. Operators commit it and review changes in PRs.

Trust model

In every case add is interactive and surfaces image refs in the pre-flight summary — operators audit before writing.

catalog.yaml version:

The version: field at the top of catalog.yaml is the catalog’s own version, independent of fracta releases. Maintainers bump it on additions/removals/promotions. list --remote surfaces it in the REMOTE column. fracta config mcp reads but does not write this field.

Org-private catalogs

First-class supported workflow. Mirror the canonical schema in any GitHub repo, HTTPS tarball, or local directory. See the org-private catalog walkthrough in the MCP catalog guide.