loopctl-mcp-server 2.56.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 +3 -3
  2. package/index.js +30 -8
  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. |
@@ -221,7 +221,7 @@ Epic 39 Repo Coordination Bus — a lightweight, tenant-isolated channel for age
221
221
  | `get_cost_summary` | orch | Get cost/token usage summary for a project, optionally broken down by `agent`, `epic`, or `model`. |
222
222
  | `get_story_token_usage` | orch | Get all token usage records for a single story. |
223
223
  | `get_cost_anomalies` | orch | Get cost anomaly alerts — stories or agents exceeding expected budgets. Optionally filter by project. |
224
- | `get_ingestion_anomalies` | orch | Get ingestion-health anomalies — capture_silence (a source_type stopped producing articles) and high_reject_rate (writes rejected at high rate, persisting no article row). Check whether knowledge capture is still landing AND being accepted. |
224
+ | `get_ingestion_anomalies` | orch | Get ingestion-health anomalies — capture_silence (a source_type stopped producing articles), high_reject_rate (writes rejected at high rate, persisting no article row), and sweep_stalled (the 30-day channel-post retention sweep is no longer enforcing retention, under the reserved source_type `channel_post_sweep`). Check whether knowledge capture is still landing AND being accepted, and whether coordination-bus retention is still enforced. |
225
225
  | `set_token_budget` | orch | Set a token budget (in millicents) for a project, epic, story, or agent scope. Requires orchestrator role. |
226
226
 
227
227
  ### Knowledge Wiki Tools (agent key)
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: {
@@ -3375,9 +3392,13 @@ const TOOLS = [
3375
3392
  name: "get_ingestion_anomalies",
3376
3393
  description:
3377
3394
  "Get ingestion-health anomalies — capture_silence (a source_type that was producing " +
3378
- "articles has gone silent) and high_reject_rate (writes attempted but rejected at high " +
3379
- "rate — 409 title_conflict / validation drops that persist no article row). Use to check " +
3380
- "whether knowledge capture is still landing AND being accepted. Paginated (page/page_size); " +
3395
+ "articles has gone silent), high_reject_rate (writes attempted but rejected at high " +
3396
+ "rate — 409 title_conflict / validation drops that persist no article row), and " +
3397
+ "sweep_stalled (the 30-day channel-post retention sweep is no longer enforcing " +
3398
+ "retention for this tenant — expired coordination-bus posts are still present well " +
3399
+ "past their expires_at; recorded under the reserved source_type channel_post_sweep). " +
3400
+ "Use to check whether knowledge capture is still landing AND being accepted, and " +
3401
+ "whether coordination-bus retention is still being enforced. Paginated (page/page_size); " +
3381
3402
  "advance `page` to enumerate all. Filter by source_type, anomaly_type, resolved status, or " +
3382
3403
  "include archived.",
3383
3404
  inputSchema: {
@@ -3391,10 +3412,11 @@ const TOOLS = [
3391
3412
  type: "string",
3392
3413
  // Keep in sync with Loopctl.Knowledge.IngestionAnomaly @anomaly_types (the
3393
3414
  // server-side Ecto.Enum + the ingestion_anomalies_anomaly_type_check DB CHECK).
3394
- enum: ["capture_silence", "high_reject_rate"],
3415
+ enum: ["capture_silence", "high_reject_rate", "sweep_stalled"],
3395
3416
  description:
3396
- 'Optional: filter by anomaly type — "capture_silence" (writes stopped) or ' +
3397
- '"high_reject_rate" (writes rejected at high rate).',
3417
+ 'Optional: filter by anomaly type — "capture_silence" (writes stopped), ' +
3418
+ '"high_reject_rate" (writes rejected at high rate), or "sweep_stalled" ' +
3419
+ '(the channel-post retention sweep is not enforcing the 30-day window).',
3398
3420
  },
3399
3421
  resolved: {
3400
3422
  type: "string",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loopctl-mcp-server",
3
- "version": "2.56.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",