Skip to main content
Glama

Report a Completed Nittim Loop (opt-in, counts only)

report_loop

NEEDS A KEY: mint one at https://nittim.com/keys. Records anonymised counts from a Nittim Loop the developer has finished and agreed to send: pass numbers, a findings-by-category tally, a fixed count, and whether each pass was clean. Counts only — never a title, file path or snippet. Nothing is charged, and an eligible report can earn a credit reward (rules and caps: see describe_protocol). Reporting the same repo again updates the existing record; the reply says which happened. Results appear at https://nittim.com/loop.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNoOptional: 'one_shot' (every lens sweeps the whole tree first, then one fix wave, then a short convergence loop) or 'serial' (one lens or area per pass, fixing between passes).
sweptNoOptional: was the CLASS swept — a guard, lint rule or exhaustiveness check that makes a new instance loud — rather than only the instances a pass named? Never derived, never changes the reward. On a repeat report, omitting it keeps the last answer; `false` withdraws it.
passesYesOne entry per pass you actually ran, in order.
repo_hashYessha256 of the repository's canonical identity (the lowercased 'owner/repo', or a stable local fingerprint) — never the repo name itself. nittim never sees the name.
client_nameNoYour own name — omit to read it from the MCP connection instead.
convergenceNoOptional: 'converged' (two consecutive clean passes) or 'cap_reached' (stopped for any other reason). Omit if unsure — the read from `passes` is derived either way.
client_versionNoYour own version string, if you have one.
repo_size_bucketYesA rough size bucket for the repo you looped over.
first_wave_lensesNoOptional, with mode 'one_shot' only: how many lenses ran in parallel on pass 1.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • removedInput schema / properties / passes / items / properties / findings / additionalProperties
      Removed value: -false
    • changedInput schema / properties / passes / items / properties / findings / description
      Previous value: -"Findings this pass named, by category — omit a category that found nothing."New value: +"Findings this pass named — one entry per category with something to report; omit a category that found nothing. Each count defaults to 0 when omitted."
    • addedInput schema / properties / passes / items / properties / findings / items
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "category": {
      +      "enum": [
      +        "security",
      +        "privacy",
      +        "reliability",
      +        "code_quality",
      +        "ai_risk",
      +        "performance",
      +        "devops",
      +        "data",
      +        "business",
      +        "devex",
      +        "accessibility",
      +        "observability",
      +        "maintainability"
      +      ],
      +      "type": "string"
      +    },
      +    "critical": {
      +      "default": 0,
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "high": {
      +      "default": 0,
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "low": {
      +      "default": 0,
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "medium": {
      +      "default": 0,
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "category"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / passes / items / properties / findings / maxItems
      Added value: +13
    • removedInput schema / properties / passes / items / properties / findings / properties
      Removed value: -{
      -  "accessibility": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "ai_risk": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "business": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "code_quality": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "data": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "devex": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "devops": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "maintainability": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "observability": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "performance": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "privacy": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "reliability": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  },
      -  "security": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "critical": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "high": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "low": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "medium": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "critical",
      -      "high",
      -      "medium",
      -      "low"
      -    ],
      -    "type": "object"
      -  }
      -}
    • changedInput schema / properties / passes / items / properties / findings / type
      Previous value: -"object"New value: +"array"
    • changedInput schema / properties / passes / items / required
      Previous value: -[
      -  "n",
      -  "findings",
      -  "fixed",
      -  "clean"
      -]New value: +[
      +  "n",
      +  "fixed",
      +  "clean"
      +]
  2. Changed10 schema fields changed
    • changedInput schema / properties / client_name / description
      Previous value: -"Your own name, e.g. 'Claude Code' — omit to let nittim read it from the MCP connection if available."New value: +"Your own name — omit to read it from the MCP connection instead."
    • changedInput schema / properties / convergence / description
      Previous value: -"Optional: how the loop stopped, if you know — 'converged' (two consecutive clean passes) or 'cap_reached' (stopped for some other reason — a pass budget, a time box, a human call — before converging). Omit if you're not sure; nittim derives its own systemic-pattern read from `passes` regardless of what you say here."New value: +"Optional: 'converged' (two consecutive clean passes) or 'cap_reached' (stopped for any other reason). Omit if unsure — the read from `passes` is derived either way."
    • changedInput schema / properties / first_wave_lenses / description
      Previous value: -"Optional, only meaningful with mode: 'one_shot' — how many lenses ran in parallel on pass 1. Rejected when `mode` is 'serial' or absent."New value: +"Optional, with mode 'one_shot' only: how many lenses ran in parallel on pass 1."
    • changedInput schema / properties / mode / description
      Previous value: -"Optional: how the loop was run — 'one_shot' (every lens read the whole tree in one first sweep, then a single fix wave, then a short convergence loop over only the fix diffs) or 'serial' (one lens or area per pass, fixing between passes). Omit if you're not sure."New value: +"Optional: 'one_shot' (every lens sweeps the whole tree first, then one fix wave, then a short convergence loop) or 'serial' (one lens or area per pass, fixing between passes)."
    • changedInput schema / properties / passes / description
      Previous value: -"One entry per pass you actually ran, in order — the same loop public/selfcheck.md walked you through."New value: +"One entry per pass you actually ran, in order."
    • changedInput schema / properties / passes / items / properties / findings / description
      Previous value: -"Findings this pass named, keyed by the 13 canonical categories — omit any category that found nothing."New value: +"Findings this pass named, by category — omit a category that found nothing."
    • changedInput schema / properties / passes / items / properties / fixed / description
      Previous value: -"How many findings this pass fixed (usually from the PRIOR pass's findings)."New value: +"How many findings this pass fixed."
    • changedInput schema / properties / repo_hash / description
      Previous value: -"sha256 of the repository's canonical identity (e.g. the lowercased 'owner/repo', or a stable local-project fingerprint) — NEVER the repo name itself. Compute this yourself; nittim never sees the name."New value: +"sha256 of the repository's canonical identity (the lowercased 'owner/repo', or a stable local fingerprint) — never the repo name itself. nittim never sees the name."
    • changedInput schema / properties / repo_size_bucket / description
      Previous value: -"A rough size bucket for the repo you looped over: xs, s, m, l, or xl."New value: +"A rough size bucket for the repo you looped over."
    • changedInput schema / properties / swept / description
      Previous value: -"Optional, only meaningful when the loop looked systemic: did you actually sweep the CLASS (a guard, lint rule, or exhaustiveness check that makes a new instance loud by default), not just fix the instances a pass happened to name? Omit if you didn't do a systemic pass or aren't sure — this is never derived from `passes`, only your own claim, and it never changes the reward. On a REPEAT report of the same repo, omitting this KEEPS whatever you last said, rather than clearing it — send `false` explicitly to withdraw an earlier sweep claim."New value: +"Optional: was the CLASS swept — a guard, lint rule or exhaustiveness check that makes a new instance loud — rather than only the instances a pass named? Never derived, never changes the reward. On a repeat report, omitting it keeps the last answer; `false` withdraws it."
  3. Changed2 schema fields changed
    • addedInput schema / properties / first_wave_lenses
      Added value: +{
      +  "description": "Optional, only meaningful with mode: 'one_shot' — how many lenses ran in parallel on pass 1. Rejected when `mode` is 'serial' or absent.",
      +  "exclusiveMinimum": 0,
      +  "maximum": 100,
      +  "type": "integer"
      +}
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "Optional: how the loop was run — 'one_shot' (every lens read the whole tree in one first sweep, then a single fix wave, then a short convergence loop over only the fix diffs) or 'serial' (one lens or area per pass, fixing between passes). Omit if you're not sure.",
      +  "enum": [
      +    "one_shot",
      +    "serial"
      +  ],
      +  "type": "string"
      +}
  4. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key side effects beyond the annotations: recording counts, never storing titles/paths/snippets, no charges, potential credit rewards, and that repeated reports update the existing record. It also mentions where results appear. The annotations (readOnlyHint false, destructiveHint false) are consistent with this write-but-non-destructive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear flow: key requirement, what is recorded, what is excluded, charging and rewards, update behavior, and result URL. It is front-loaded with the most critical information (key need) and remains concise without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 9 parameters and nested objects, the description provides essential context: the opt-in nature, counts-only policy, update semantics, and the external URL for results. It explains the overall purpose and constraints sufficiently for an agent to decide when and how to invoke it, even without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with detailed descriptions for all parameters, including enums, constraints, and defaults. The description itself does not add significant parameter-specific meaning beyond stating the overall purpose (counts only). Thus, it meets but does not exceed the baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title and description clearly state the verb 'report', the resource 'completed Nittim Loop', and the scope (counts only, opt-in). It distinguishes the action from reading or auditing by focusing on reporting anonymised counts. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use the tool: after finishing a Nittim Loop and agreeing to send counts. It also explains the update behavior for repeated reports. However, it does not explicitly contrast with alternative tools (e.g., get_loop, describe_protocol) or state when not to use it, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.