loopctl-mcp-server 2.57.0 → 2.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +2 -2
  2. package/index.js +19 -2
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -139,10 +139,10 @@ autonomous agent) can self-remediate without a human. Full agent-tenant lifecycl
139
139
 
140
140
  | Tool | Description |
141
141
  |---|---|
142
- | `get_tenant` | Get current tenant info. Use to verify connectivity. |
142
+ | `get_tenant` | Get current tenant info. Use to verify connectivity, and to read `capabilities` — which surfaces your `trust_tier` includes — before attempting a write. |
143
143
  | `list_projects` | List all projects in the current tenant. |
144
144
  | `resolve_project` | Resolve a repo to its `project_id` in one cheap call — provide any of `slug`, `repo_url` (`git@github.com:owner/repo.git`, `https://github.com/owner/repo`, and bare `owner/repo` all match), or `name`. Precedence `slug > repo_url > name`, first match wins. Use the returned `id` to scope captures/recall (`memory_*`, `recall_context`). `404` `not_found` if nothing matches, `422` `no_identifier` if none supplied, `409` if a fuzzy identifier matches more than one active project. |
145
- | `create_project` | Create a new project in the current tenant. |
145
+ | `create_project` | Create a new **work** project (epics/stories/custody). Requires orchestrator+ **and** a `human_anchored` tenant; an agent-rooted tenant gets `403 custody_tier_required` and should use `create_kb_scope`. |
146
146
  | `delete_project` | **Requires `LOOPCTL_USER_KEY`.** Delete a project and all of its dependent resources (epics, stories, audit entries). Irreversible — orchestrator role is not sufficient. |
147
147
  | `get_progress` | Get progress summary for a project, including story counts by status. Pass `include_cost=true` for cost data. |
148
148
  | `import_stories` | Import stories into a project from a structured payload (Epic 12 import format). Pass `merge: true` to add stories to epics that already exist (otherwise duplicates return 409). For large payloads, use `payload_path` to read JSON from disk instead of passing it inline. |
package/index.js CHANGED
@@ -2461,7 +2461,17 @@ const TOOLS = [
2461
2461
  // Project Tools
2462
2462
  {
2463
2463
  name: "get_tenant",
2464
- description: "Get current tenant info. Use to verify connectivity.",
2464
+ description:
2465
+ "Get current tenant info. Use to verify connectivity, AND to discover which surfaces " +
2466
+ "your tenant's trust_tier includes BEFORE attempting a write. The response carries " +
2467
+ "`capabilities`: `surfaces` (each surface -> \"allowed\" | \"requires_human_anchor\"), " +
2468
+ "`allowed`/`blocked` lists, `descriptions`, and `remediation` when something is blocked. " +
2469
+ "Read the live `allowed`/`blocked` lists from the response — they are the authoritative, " +
2470
+ "current split for your TIER — instead of probing for a 403 per endpoint. Two bounds, " +
2471
+ "restated in the payload as `scope: trust_tier_only` and `applies_to: mutating_actions`: " +
2472
+ "the ROLE gate is separate (an `allowed` surface can still return 403 `insufficient_role` " +
2473
+ "if your key's role is too low), and READS stay open on every surface, including blocked " +
2474
+ "ones — `blocked` means writes.",
2465
2475
  inputSchema: {
2466
2476
  type: "object",
2467
2477
  properties: {},
@@ -2512,7 +2522,14 @@ const TOOLS = [
2512
2522
  },
2513
2523
  {
2514
2524
  name: "create_project",
2515
- description: "Create a new project in the current tenant.",
2525
+ description:
2526
+ "Create a new WORK project (kind: work) in the current tenant — the container for " +
2527
+ "epics/stories/dispatch and the chain-of-custody surface. Requires orchestrator+ role " +
2528
+ "AND a human_anchored tenant (WebAuthn signup ceremony); an agent_rooted tenant gets " +
2529
+ "403 custody_tier_required, by design — a tenant must not be able to open a custody " +
2530
+ "surface for itself. If you only need a project row to scope KNOWLEDGE to the repo you " +
2531
+ "are on, use create_kb_scope instead (agent role, no human anchor). Call get_tenant " +
2532
+ "first and read `capabilities` to see which of the two applies to your tenant.",
2516
2533
  inputSchema: {
2517
2534
  type: "object",
2518
2535
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loopctl-mcp-server",
3
- "version": "2.57.0",
3
+ "version": "2.58.0",
4
4
  "description": "MCP server for loopctl \u2014 structural trust for AI development loops",
5
5
  "type": "module",
6
6
  "main": "index.js",