Tools, resources, and prompt
Sixteen tools, two resources, one prompt. Three tools score user stories for Integrated Vindex and thirteen belong to Agent Reflection. The server name is vindex. Every string below is what the assistant sees; schemas are published as tool input and output schemas so clients can validate calls.
Server instructions
The server advertises these instructions to every client. They are why an assistant scores several stories one at a time and leads with the finding.
Vindex scores user stories against INVEST and returns percentages with reasoning.
Score one story per call. If the user has several stories, call score_story once
for each, in sequence, and present each result as it arrives. Pass the story's
tracker id so re-scores stay free. Present the finding first, then the percentages.score_story
Scores one user story synchronously and returns the INVEST result. One POST /api/v1/score to the Vindex gateway per call; the score comes back in the same call.
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Description shown to the assistant
Score a user story against the six INVEST dimensions with Vindex. Returns an overall percentage, a health band, and per-dimension percentages with reasoning and improvement suggestions. Pass story_id (the Jira key, Azure DevOps work item id, or any stable id from the user’s tracker) so the story is counted once and every later score of it is free. Without story_id, the story is identified by its text: scoring the same text again is free, scoring edited text counts as a new story. Takes 2 to 10 seconds.
Input
{
"type": "object",
"properties": {
"title": { "type": "string", "minLength": 3, "maxLength": 300 },
"description": { "type": "string", "minLength": 10, "maxLength": 20000 },
"acceptance_criteria": { "type": "string", "maxLength": 20000 },
"story_id": { "type": "string", "maxLength": 200,
"description": "Stable id from the user's tracker. Strongly recommended." }
},
"required": ["title", "description"],
"additionalProperties": false
}Output (structured content)
{
"story_id": "NW-108",
"overall_percent": 38,
"health": "at_risk",
"dimensions": {
"independent": { "percent": 40, "reasoning": "…", "suggestions": ["…"] },
"negotiable": { "percent": 60, "reasoning": "…", "suggestions": ["…"] },
"valuable": { "percent": 60, "reasoning": "…", "suggestions": ["…"] },
"estimable": { "percent": 20, "reasoning": "…", "suggestions": ["…"] },
"small": { "percent": 20, "reasoning": "…", "suggestions": ["…"] },
"testable": { "percent": 30, "reasoning": "…", "suggestions": ["…"] }
},
"recommendations": [
"Add measurable acceptance criteria with baseline and target metrics (e.g., p95 scan-to-confirm time, scans/hour, error rate) and specify devices/network conditions for measurement.",
"…"
],
"identity": { "mode": "story_id" },
"vindex": { "job_id": "f58ed328-…", "processing_ms": 22867 }
}- health is
healthy(80 to 100),needs_review(60 to 79), orat_risk(0 to 59). A suggestion, not a gate. - recommendations are ordered, highest impact first. The first is the finding the assistant leads with.
- identity.mode is
story_idwhen the caller’s id was used andcontent_hashwhen the story was identified by its text. - The tool also returns a markdown text rendering (story id and percentage, band, finding, top recommendations, dimension table) for clients that do not render structured content.
Errors
Returned as tool results with isError: trueand one sentence: “Vindex did not respond in time. Try again in a moment.” (65-second ceiling), “Vindex is busy for your company, try again shortly.” (concurrency), or an allowance message when the company’s new stories are paused for the month. Re-scores of counted stories still succeed when the allowance is exhausted.
One story per call, by design
There is no batch tool. A batch stacks several inference calls behind one response and fails on client timeouts exactly when a backlog is large, and an assistant has no good way to display ten full results. If the user asks for several stories, the assistant calls score_story once per story, in sequence, and presents each result as it arrives.
get_usage
Reports the company’s story allowance for the current month. Reads the same records the Vindex Portal usage page shows, so the two never disagree.
- readOnlyHint: true
- idempotentHint: true
Input
{ "type": "object", "properties": {}, "additionalProperties": false }Output
{
"company": "Acme",
"company_name_is_placeholder": false,
"plan": "free", // free | starter | standard | pro | enterprise
"period": { "start": "2026-09-01", "end": "2026-09-30", "timezone": "UTC" },
"stories": { "counted_this_month": 7, "allowance": 10, "remaining": 3 },
"state": "ok", // ok | exhausted
"upgrade_url": "https://www.vindexgateway.com/pricing"
}Text rendering: “Acme has scored 7 of Up to 10 stories this month on the free plan. 3 remain. Re-scoring counted stories is free.” When the company still carries its placeholder name the text adds a reminder to rename it in the Vindex Portal.
explain_invest
Returns the INVEST dimension definitions and the health bands. Served from the server itself; makes no Vindex call and uses no allowance, so the assistant can explain a result without spending anything.
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
Input
{
"type": "object",
"properties": {
"dimension": { "type": "string",
"enum": ["independent", "negotiable", "valuable", "estimable", "small", "testable"] }
},
"additionalProperties": false
}Without dimensionit returns all six plus the bands. With one, it returns that dimension’s definition, what Vindex looks for, and common failure patterns.
Agent Reflection tools
Thirteen tools in six features: Account, Rules, Rule sets, Governance, Validation, and Reporting. They are separate from the three story tools above. Access is set per feature, by role. Who can call each tool is below, and authentication has the table. The detailed pages are Agent Reflection.
get_account
Account · Any member
Who the agent works for: the company, your role, whether your company only allows approved items, and which features are open, including Track reporting. Free.
Inputs
- None.
Returns
- Company, plan, role (Company admin or Company user), the approved-only policy, and whether reporting is open.
get_credit_balance
Account · Any member
The company's shared critique credit balance and its recent critique use. Every member sees the same balance. Free.
Inputs
- None.
Returns
- The balance and recent use.
list_rules
Rules · Any member
Lists the rules you can use, or reads one. Free. Returns active rules from your own catalog, your approved list, and the public catalog, and nothing else.
Inputs
- query, tags: search and filter.
- source: own, approved, or public.
- status: for your own rules only.
- rule_id, version_id: read one rule and its content.
- Paging.
Returns
- For each rule: rule_id, name, description, tags, status, owner, catalog, active_version_id, and modified_at.
- Content is returned only when you read one rule.
create_rule
Rules · Any member
Creates a rule in your private catalog as a draft. The agent should show the person the Markdown and get agreement before uploading, unless it is acting on its own.
Inputs
- name, description, tags, content (the Markdown as text).
Returns
- rule_id, version_id, and status: draft, with the next step.
update_rule
Rules · Members of the owning company
Saves a new version of a rule, or changes its status or metadata. A new version does not become active until someone sets the rule to active.
Inputs
- rule_id.
- content: saves a new version.
- base_version_id: the version you started from. If a newer one exists, your change is still saved and the result warns you.
- status: draft, test, active, disabled, or archived. Metadata: name, description, tags.
Returns
- The new version, and the company's rule sets that still pin an older version.
list_rulesets
Rule sets · Any member
Lists the rule sets you can use, or reads one with its pins. Free. Reading one shows, for each pin, whether the rule has a newer active version.
Inputs
- query, tags, source, paging, or a rule set ID to read.
Returns
- Each rule set with its status, owner, and active version. Reading one returns its pins with each rule's name, description, owner, and version.
create_ruleset
Rule sets · Any member
Creates a rule set in your catalog as a draft. A pin with no version uses the rule's active version, and the result says which version it used.
Inputs
- name, description, tags, pins (each a rule_id with an optional version_id).
Returns
- ruleset_id, version_id, status: draft, and the pins as saved.
update_ruleset
Rule sets · Members of the owning company
Saves a new rule set version with changed pins, or changes status, metadata, or the active version without a new version. Archives a set.
Inputs
- ruleset_id.
- pins: saves the next version, in draft.
- status, metadata, active version, replaced_by.
Returns
- The saved version and its status.
approve_item
Governance · Company admins
Adds or removes an item on your company's approved list, pinned to a version. When your company turns on approved-only, its agents can run only approved items. Others are refused as not approved by your company.
Inputs
- The rule or rule set, and the version.
Returns
- The updated approved list entry.
validate
Validation · Any member with credits
Checks an output against one rule or one rule set and returns a pass or fail for each rule, and names any rule that did not pass. On a fail, the agent reads that rule, fixes the output against it, and calls again. $0.03 per call, whether it checks one rule or a whole rule set. Each attempt is charged.
Inputs
- output, and exactly one of rule_id or ruleset_id.
- Optional: version_id, session_id, max_attempts, request_id, agent_id, tags, agent_model, agent_label, output_ref.
Returns
- result, the versions that ran, attempt and attempts_left, credits_left, and validation_id. For a rule set, also failed_rules and rules_run.
get_reporting_schema
Reporting · Companies with Track
The metrics, dimensions, filters, and limits you may use, with definitions.
Inputs
- None.
Returns
- The schema and its version.
query_report
Reporting · Companies with Track
Rows for one metric, scoped to your company and your role, with the metric's definition and the time the data runs to.
Inputs
- metric, up to two dimensions, filters, from and to, period, compare, sort, limit, cursor.
Returns
- Rows, counts, the definition, and data_as_of.
get_benchmarks
Reporting · Companies with Track
Your figure on a public rule or rule set against anonymised peers, only when enough other companies use it. It never shows another company's figure.
Inputs
- metric, one public rule_id or ruleset_id, a month, and optionally by_agent_model.
Returns
- Your figure, the peer median, and your quartile, or a refusal that says why there is no comparison.
For the critique loop, the instruction to give your agent is to read each rule that failed, revise the output against it, send the whole revised output in the same session, never resend unchanged output, and stop at a pass, at the attempt cap, or when credits run out, then tell the person what happened. The standing instruction on Connect your agent also asks the agent to send agent_model on every call.
Resources
| URI | MIME | Content |
|---|---|---|
| vindex://invest/dimensions | application/json | The same content as explain_invest with no argument, for clients that load reference material as a resource |
| vindex://health-bands | application/json | { healthy: [80,100], needs_review: [60,79], at_risk: [0,59] } with labels |
Resources are static in content, but the endpoint still requires a valid token like every request.
Prompt: score-story
Argument: story_id(optional). Clients surface prompts as slash commands or quick actions; this is the one-click “score whatever is in the chat” action.
Score the user story currently in this conversation with Vindex.
Take the story exactly as it stands right now, whether the user pasted it, you
drafted it, or you wrote it together. Do not change a word. Split it into:
- title: the story's title or one-line summary
- description: the body of the story
- acceptance_criteria: the acceptance criteria, if there are any
Call the score_story tool with those fields, passing story_id when the user has
a tracker id for the story.
Present the result in this order:
1. The finding in plain language, first.
2. The overall percentage and the health band (Healthy, Needs review, At risk).
3. The per-dimension detail only if the user asks for it.
Vindex judges the story as written. Do not offer to rewrite or improve it unless
the user asks.The prompt contains no instruction to rewrite, improve, or re-score. What the user does with the result is between the user and their assistant.
Vocabulary in every tool string
- The unit is the story. Never “tickets”, never “scores” as a thing being used up.
- Allowances are phrased “Up to N stories”. No per-story price appears anywhere.
- Percentages only. Never a score out of ten.
- Health bands: Healthy, Needs review, At risk. They are suggestions.
