1 Connect Your Agent
mitosis edited this page 2026-07-29 08:11:35 -05:00

Any agent that speaks MCP — Claude Code, Claude Desktop, Cursor, your own harness — can plug into this platform and build here: create apps, ship releases, file and wire issues, query databases, read contracts. One endpoint, no kubectl, no git remotes, no Forgejo API keys scattered around.

Connect

The server lives at https://mcp.espoautos.com/mcp, transport Streamable HTTP. Two ways in:

OAuth (recommended). Spec-compliant clients need no pre-shared secret — a browser window opens on the platform's Forgejo login, you approve, done:

claude mcp add --transport http plat https://mcp.espoautos.com/mcp

Authenticate when prompted; the client auto-discovers the OAuth endpoints and runs PKCE through Forgejo. Access tokens last 24h, refresh tokens 30d — your client renews silently.

Personal Access Token. Generate a PAT at git.espoautos.com/user/settings/applications with scopes read:user, read:organization, write:repository, then:

claude mcp add --transport http plat https://mcp.espoautos.com/mcp --header "Authorization: Bearer <FORGEJO_PAT>"

Sanity check without invoking a tool: GET https://mcp.espoautos.com/me with your credential returns {login, orgs, ...} — who the server thinks you are.

What your agent may do

Tools act as you: Forgejo enforces your repo and org permissions on every call, so your agent can do exactly what your account can — no more. Read tools need read on the repo, write tools need write, and app-creation tools require org membership. Calls are rate-limited to 60/min per user. Every call is audit-logged.

The tool surface

37 tools, grouped by intent. The full name → params table is in Reference; these are the ones you'll reach for.

Create and plan

Tool One line
create_app Repo from plat/_app-template + CI credentials + TLS'd URL + login + optional Postgres/bucket, in one synchronous call. Org-owned only — if the owner is a user it refuses and suggests an org (<you>-apps). Prod stays dormant until your first release.
create_app with migrate: true Bring an existing repo onto the platform: shaped repos bypass the template, the v0.1.0 release is skipped, and the first real release comes when the integration PR merges.
generate_app The async sibling: create the repo and walk away — the platform's build crew detects it within ~a minute and ships v1 from nothing but the description. The description IS the builder's entire brief. Pass database: false for a pure consumer that owns no data.
create_issue / create_milestone File work; label agent-work queues it for the crew. Milestones become episodes.
add_issue_dependency Declare blocked-by edges (cross-repo supported); the autopilot won't dispatch a blocked issue until its blocker closes. Cycle-guarded.
lint_dependency_graph Org-wide audit: cycles, orphaned consumers, duplicate providers, data-silo violations, critical path.

Ship

Tool One line
commit_files Many files, one commit, straight through the API — auto-creates the branch.
create_pr / merge_pr Open and land PRs; create_pr is idempotent, merge_pr tells you exactly what to fix on a 405.
release_app Cut a semver release at main HEAD; CI builds image + chart, then prod is pinned to that tag. Dev auto-rolls on every release; prod moves only through this tool.
get_build / retry_build Read CI status for a ref; re-dispatch a failed workflow (it refuses PR-only workflows — push a commit to re-run a preview instead).

Integrate

Tool One line
get_contract Before building against another app: its OpenAPI URL, typed client package, m2m audience, your granted scopes, and the entities you are forbidden to duplicate a table for. Not published yet → wait for the owner's contract-skeleton to merge and re-run.

Observe

Tool One line
get_app_status Deployment readiness, pods, image, recent warning events — per env (prod, dev, pr-<N>).
tail_logs Log snapshot across the env's pods, with grep, since, and crashed-container (previous) support.
query_db SQL against the app's Postgres — read-only by default, always as the non-superuser app role.
read_repo / list_prs / list_issues / list_apps Read anything you can see in the UI.

Operate

Tool One line
comment / update_issue Steer the crew and close resolved issues (issues and PRs share one numbering space — both work on both).
add_domain / verify_domain / set_app_domain / set_org_domain Bring-your-own domains: DNS TXT challenge, then per-app or org-wide hosting.
rotate_oauth_app Regenerate an app's login credentials (destructive: signs out every user).
delete_app Tear down the deployment and gitops overlay; the repo is kept unless you pass force_repo: true.

App secrets are not a tool either: set them as repo Actions secrets and they sync into the running app automatically on every push — see Secrets and Config.

One deliberate absence: PR previews are not a tool — every open PR gets its own environment automatically via CI. See Preview Environments.

What you could automate

Three recipes to steal:

  1. Nightly issue triage. A scheduled agent runs list_issues across your org's repos, lint_dependency_graph for stalls and cycles, comments findings on the offenders, and labels ready work agent-work — the crew picks it up by morning.
  2. Org from a PRD. Paste a product brief at your agent: it creates the org in Forgejo, then calls generate_app once per app with dense one-sentence descriptions, database: false on the consumers, and add_issue_dependency edges so owners ship their contract-skeletons before consumers build. The planner flow in Orgs and Planning does this natively — this recipe is how your agent drives it.
  3. Contract-first consumer scaffold. Before writing a line of integration code: get_contract(owner_org, owner_app)bun add the typed client it names → commit_files a scaffold that holds only urn:<owner>:<name>:<entity>:<id> references → create_pr. No duplicated tables, ever.

New to the platform itself? Start with Build Your First App, then let your agent take over.