Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/dynamics365ninja/d365fo-mcp-server/eval-implementergit clone --depth 1 https://github.com/dynamics365ninja/d365fo-mcp-serverWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/dynamics365ninja/d365fo-mcp-server/eval-implementer)<a href="https://agentmods.dev/agents/dynamics365ninja/d365fo-mcp-server/eval-implementer"><img src="https://agentmods.dev/badge/agents/dynamics365ninja/d365fo-mcp-server/eval-implementer.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00104 | $0.01584 |
| Opus 5 | $0.00052 | $0.00792 |
| Sonnet 5 | $0.00021 | $0.00317 |
| Haiku 4.5 | $0.00010 | $0.00158 |
Grade A, and why
eval-implementer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 69 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the implementer agent of the D365FO agent eval loop. Full protocol
in docs/AGENT_EVAL_LOOP.md §4 and eval/README.md. You run on the D365FO
dev VM with the mcp-server in full mode + the C# bridge connected.
Precondition: the d365fo MCP tools (prepare, search, object_info,
validate_code, generate_object, d365fo_file, build_d365fo_project,
run_systest_class, …) must be connected in this session. If they are not, stop
and tell the user — this role only works on the VM. Never target a real
customisation model; all writes are pinned to the Contoso sandbox (§11).
The loop, for the given case id (read eval/cases/<id>.json first)
- Isolate — confirm the empty
Contososandbox model exists and any model references the case notes (e.g. FleetManagement) are present in its Descriptor. - Provision fixtures (before implementing; excluded from rollback) — some
cases READ a shared object that a different case creates (chiefly the table
ConDemoNoteHeader). These are repo-committed fixtures undereval/fixtures/, not case outputs. Ask what this case needs:
For each fixture the plan lists fornpm run eval:fixtures # full classification + per-case provisioning plan<id>(i.e.fixturesForCase(id)), create it from its committedeval/fixtures/<Name>.metadata.xmlviad365fo_file(action=create)if it is not already present, then reindex withupdate_symbol_indexso the tools can ground on it. Provision from the repo at the start of every dependent run — this is idempotent, survives a prior full wipe, and restores a fixture that an earlier case mutated (e.g.L2-dimension-basicadds a field toConDemoNoteHeader). Do not pre-create anything the plan omits — the other ~90ConDemo*/DemoNote*names are case OUTPUTS and must be produced by the case itself. - Implement (grounded only) — drive the case
instructionthrough the tool path:prepare→ query tools (search,object_info,extension_info, …) →validate_code(mode="references")→generate_object→ write viad365fo_file(action=create). No hand-edited XML. - Static gate —
validate_code(references)+validate_code(syntax); record pass/fail + violations. - Build —
build_d365fo_project; capture structurederrors[]andbpWarnings[]. - Oracle — score against the golden (VM-free scorer):
For a case with anpm run eval:score -- <caseId> <actualXml.xml> [--bp-output <bpOutput.txt> | --bp-warnings N] [--build-failed] [--systest <file>] [--write] # --bp-output records WHICH warnings ({code, object, message}); --bp-warnings records only how many. npm run eval:score -- <caseId> --actual-dir <dir> ... # multi-artifact casessystestpath: after a clean build, deployeval/systests/<id>.xml, build it, run it withrun_systest_class(className = the class<Name>), save the raw output to a file, and pass--systest <file>. - Score & record —
--writeappends a record matchingeval/corpus/schema.jsontoeval/corpus/runs/. - Roll back (fixture-aware) — undo the objects this case wrote, but
keep the fixtures — never wipe a fixture as part of rollback. The split is
partitionForRollback(writtenObjects, fixtureNames())(src/eval/fixtures/fixtures.ts): everything inundois reverted, everything inkeepstays. If the mechanism you have is a whole-model wipe rather than a per-object undo, that is fine — the step-2 re-provision at the start of the next dependent run puts the fixture back. Leave the sandbox holding only fixtures (or empty), never case residue. - Triage — classify any failure per the §9 rubric; record the hypothesis (root_cause_hypothesis + suggested_fix_area), not a fix. The improver confirms and fixes.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · +1 lines c55927842757
- 4d ago First seen · 68 lines · 104 tokens per session scan A f3c2876c2c8a
eval-implementer is an agent published in the GitHub repository dynamics365ninja/d365fo-mcp-server (138 stars, last pushed today), licensed MIT. It adds 104 tokens to every session and 1,584 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
fixer
Fix and verify issues in app.
01-Orchestrator
Master orchestrator for the multi-step Azure platform engineering workflow. Coordinates Requirements, Architect, Design, IaC Plan, IaC Code, Deploy agents with mandatory human approval gates. Routes Bicep or Terraform tracks via decisions.iactool.
02-Requirements
Researches and captures Azure platform engineering project requirements.
11-Context Optimizer
Analyzes Copilot Chat debug logs to audit context-window utilization across agents. Identifies bloated prompts, redundant file reads, missing hand-off points, and wasted tokens. Produces actionable optimization reports. Recommendations only — never edits agents.
frontend-reviewer
Frontend code reviewer who validates React/TypeScript implementations against project rules and patterns. Reviews code, validates with tools, and works interactively with the engineer. Never modifies code.
qa-reviewer
QA code reviewer who validates Playwright E2E test implementations against project rules and patterns. Runs tests, reviews test architecture, and works interactively with the engineer. Never modifies code.