{"openapi":"3.1.0","info":{"title":"ForIT Dev HTTP API","description":"HTTP wrapper over the ForIT Dev MCP server. Every MCP tool is exposed as POST /tools/{name}.","version":"0.1.0"},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"FORIT_DEV_API_TOKEN issued out-of-band."}},"schemas":{}},"paths":{"/health":{"get":{"summary":"Liveness probe","tags":["meta"],"responses":{"200":{"description":"Default Response"}}}},"/tools/project_list":{"post":{"operationId":"project_list","summary":"List all ForIT projects with health status","tags":["projects"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/project_status":{"post":{"operationId":"project_status","summary":"Get detailed status for a specific project","tags":["projects"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","description":"Project slug (e.g. forit-ai)"}},"required":["slug"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/job_start":{"post":{"operationId":"job_start","summary":"Start an autonomous coding session for a task/story","tags":["jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"repo":{"type":"string","description":"GitHub repo (org/name)"},"spec":{"type":"string","description":"Task description — what the agent should build/fix"},"branch":{"type":"string","description":"Branch name (auto-generated if omitted)"}},"required":["repo","spec"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/job_status":{"post":{"operationId":"job_status","summary":"Check status of a coding session","tags":["jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","description":"Job ID from job_start"}},"required":["job_id"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/job_list":{"post":{"operationId":"job_list","summary":"List all active and recent coding sessions","tags":["jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/job_output":{"post":{"operationId":"job_output","summary":"Get recent output from a coding session","tags":["jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","description":"Job ID"},"lines":{"type":"number","description":"Number of lines (default 50)"}},"required":["job_id"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/job_stop":{"post":{"operationId":"job_stop","summary":"Stop a running coding session","tags":["jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","description":"Job ID"}},"required":["job_id"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/health_check":{"post":{"operationId":"health_check","summary":"Check health endpoints for a project or all projects","tags":["projects"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","description":"Project slug (omit for all)"}},"required":[]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/audit_run":{"post":{"operationId":"audit_run","summary":"Run static audit checks (secrets, tsconfig strict, CLAUDE.md presence) against a working directory using a project manifest","tags":["audit"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","description":"Project slug whose manifest defines the standards"},"path":{"type":"string","description":"Absolute path to the working directory to audit"}},"required":["slug","path"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/github_project_status":{"post":{"operationId":"github_project_status","summary":"Fetch GitHub state for every repo in a project manifest: default branch, latest commit, open PR count, latest workflow run.","tags":["meta"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","description":"Project slug"}},"required":["slug"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/tools/job_cleanup":{"post":{"operationId":"job_cleanup","summary":"Garbage-collect finished sessions older than N hours (default 24) and remove their git worktrees. Pass dry_run: true to preview.","tags":["jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"older_than_hours":{"type":"number","description":"Minimum age in hours for GC eligibility (default 24)"},"dry_run":{"type":"boolean","description":"Report without deleting (default false)"}},"required":[]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type","text"]}},"isError":{"type":"boolean"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array"},"isError":{"type":"boolean"}}}}}}}}},"/openapi.json":{"get":{"summary":"OpenAPI 3.1 spec","tags":["meta"],"responses":{"200":{"description":"Default Response"}}}}},"security":[{"ApiKey":[]}],"tags":[{"name":"projects","description":"Project manifest + health"},{"name":"jobs","description":"Coding session lifecycle"},{"name":"audit","description":"Static audit checks"},{"name":"meta","description":"Server metadata"}]}