Skip to main content

sprucelab

Agent-first surface for Sprucelab. One install ships a typed CLI and an MCP server — both wrapping the same public HTTP API. Drop in whichever transport your agent host speaks.

pip install sprucelab

Two transports, one package

sprucelab — typed CLI

For terminal-resident agents (Claude Code, Aider, anything that drives a shell) and humans at the prompt. Every command supports --json for machine-readable output; mutations support --dry-run where applicable.

sprucelab auth register --token <YOUR_KEY> --url https://www.sprucelab.io
sprucelab projects list --json
sprucelab files upload ./models/foo.ifc --project-id <uuid> --wait
sprucelab verify --model-id <uuid> --dry-run

Agents move through sprucelab faster than humans do — the rendering is for humans; agents read the JSON. Once an agent has worked out the right sequence of calls, the same commands run unattended from cron / GitHub Actions / Airflow without burning tokens — that's the whole point of headless-first. The AI budget stays reserved for actual reasoning work (claim extraction, type classification, verification), not for re-deriving the same script every run. See sprucelab --help for the full command tree.

sprucelab-mcp — MCP server over stdio

For host-resident agents (Claude Desktop, Cursor, Continue, …) that launch tools as subprocesses and call them as typed tool calls.

{
  "mcpServers": {
    "sprucelab": {
      "command": "sprucelab-mcp",
      "env": {
        "SPRUCELAB_API_URL": "https://www.sprucelab.io",
        "SPRUCELAB_API_TOKEN": "your-token-here"
      }
    }
  }
}

The MCP server is a thin wrapper over the same HTTP surface the CLI talks to — the one advertised at https://www.sprucelab.io/api/capabilities/. No custom protocol, no surprises. If a tool fails, the error body is the literal API response.

Auth

Read-only discovery (capabilities, agent_tools_manifest, EIR catalog, EIR presets) works without auth on either transport. Everything else needs a token.

Get one via the web app at https://www.sprucelab.io/agents, then either:

sprucelab auth register --token <YOUR_KEY> --url https://www.sprucelab.io

…or set SPRUCELAB_API_TOKEN in the MCP env block above. The CLI and the MCP server read the same token store.

For experimentation, the public sandbox token (read-only) is published on https://www.sprucelab.io/agents.

MCP tools

Read-only discovery (no auth):

Tool Purpose
capabilities() Fetch the full capabilities manifest. Always start here.
agent_tools_manifest() Fetch /.well-known/agent-tools.json.
eir_catalog() EIR rule grammar — every kind, fields, singleton flag.
eir_presets(preset?) Ready-to-seed EIR bundles.

Projects + EIR (Bearer):

Tool Purpose
list_projects(), show_project(id) Project listing + detail.
scaffold_project(name, …) Create project + seed EIR in one call.
list_members(id), add_member(id, email, role), remove_member(id, member_id) Per-project membership.
mint_tenant_token(id, name, scope), list_tenant_tokens(id), revoke_tenant_token(id, token_id) Project-scoped agent tokens.
eir_rules(id) List the active EIR config's rules.
eir_apply_preset(id, preset, mode) Apply preset in merge or replace mode.
eir_add_rule(id, kind, config, upsert) Append one rule; singleton 409 unless upsert=True.
eir_remove_rule(id, rule_id) Idempotent rule delete.
eir_set_rules(id, rules) Atomic full replace.

Models + types + verification (Bearer):

Tool Purpose
list_models(project_id?) List models in a project.
list_types(model_id), classify_types(mappings) Type list + batch classify.
verify_dry_run(model_id), verify_model(model_id) Verification, with persistence opt-in.

Files (Bearer):

Tool Purpose
list_files(project_id?), show_file(id) List + detail.
upload_file(project_id, file_path, on_duplicate) Multipart upload from a local path.
reprocess_file(id) Trigger a fresh ExtractionRun.
extraction_log(file_id, run_id?) Full ExtractionRun (log_entries + quality_report).
list_observations(project_id?) Layer-1 observation log.

Issues + scopes (Bearer):

Tool Purpose
list_issues(…), show_issue(id), create_issue(…), update_issue(…), resolve_issue(id) Issue CRUD.
issues_from_verification(model_id) Route verification failures into issues.
list_scopes(project_id, as_tree), create_scope(…) Federation scopes.

Webhooks (Bearer):

Tool Purpose
list_webhooks(project_id?) List subscriptions.
create_webhook(project_id, target_url, events) Subscribe + receive signing secret ONCE.
disable_webhook(id, enable?) Toggle is_active.
delete_webhook(id) Permanent delete.
list_deliveries(id), redeliver(delivery_id), test_webhook(id) Delivery log + replay + synthetic test.

Local-dev surface (sprucelab dev …)

The CLI also ships a dev subcommand that bypasses the API and talks directly to a local Django install — for working on Sprucelab, not against prod. Same agent-first invariants (--json everywhere, --dry-run on mutations).

sprucelab dev env                                        # repo + service status
sprucelab dev db stats --json                            # row counts for key tables
sprucelab dev db materials --project <uuid> --top 15     # top materials per project
sprucelab dev seed materials --project <uuid> --dry-run  # preview seed plan
sprucelab dev test tsc                                   # frontend type-check
sprucelab dev test e2e materials --headed                # Playwright smoke

Powered by

Sprucelab's IFC extraction layer is powered by ifcfast — 25–47× faster than ifcopenshell on production IFCs. See https://www.sprucelab.io/benchmarks.

Metadata

Release files for sprucelab 0.1.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sprucelab 0.1.6.0
File Size Uploaded
sprucelab-0.1.6.0.tar.gz 150.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sprucelab 0.1.6.0
File Interpreter ABI Platform
sprucelab-0.1.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 248.6 kB

Release files / sprucelab-0.1.6.0.tar.gz

Download URL sprucelab-0.1.6.0.tar.gz
Size 150.4 kB
Tags Source
SHA-256 checksum
How to use checksums
cb1831d5e5ae6921ea8b904236efcb70afc79cd32b570bb567e63432e0732d12
BLAKE2b-256 checksum
How to use checksums
419c48a2225ad75f13c0d5e4666c264cff7c6904850388c1e20485ac2ef58d9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 1, 2026.

Transparency log

Release files / sprucelab-0.1.6.0-py3-none-any.whl

Download URL sprucelab-0.1.6.0-py3-none-any.whl
Size 98.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b912d39e3d6f9d7e3decb14aab29f90551b9a26f75beb9073331bd34fd62a586
BLAKE2b-256 checksum
How to use checksums
075fabbc352b7fa92673226698716026f62ceb501b5bfb42861a9de898b34847
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.6.0 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page