Skip to main content
Glama
Paul-PSDigital

aadc-audit-mcp

aadc-audit-mcp

A local MCP server (and CLI) that audits a software project against the UK ICO Age Appropriate Design Code (the Children's Code, AADC), the statutorily-enforceable framework that governs any online service "likely to be accessed by children" in the UK.

Runs entirely on your machine over stdio. Your source code never leaves the device.

What it does

Fifteen MCP tools, all local-only: twelve individual audits, plus audit_all, list_standards, and read_standard.

MCP tool

What it does

aadc.audit_all

Run every audit against a local project root and return one consolidated result.

aadc.audit_permissions

Inspect iOS Info.plist + Android AndroidManifest.xml for permissions outside the AADC allowlist. Standards 8, 10.

aadc.audit_sdks

Inspect pubspec.yaml / package.json / requirements.txt for analytics, advertising, profiling, or tracking SDKs. Standards 5, 9, 12, 13.

aadc.audit_launchurl

Inspect Dart launchUrl() calls and web external-navigation escapes (window.open, location assignment, <a target="_blank">) for outbound links that dump a child into the parent's logged-in browser. Standards 11, 14.

aadc.audit_network_isolation

Inspect declared protected paths (microphone, camera, on-device-only data) for any network API import. Standard 8.

aadc.audit_defaults

Heuristic warn-only scan for default-true on suspicious privacy keys (share / track / profile / etc). Standard 7.

aadc.audit_reading_grade

Heuristic reading-grade check of user-facing copy. Standards 4, 11.

aadc.audit_placeholders

Flag placeholder content not yet replaced (lorem ipsum, TODO, TBD, dummy text). Standards 4, 6.

aadc.audit_link_reachability

Warn-only check of external link reachability. Standards 4, 6.

aadc.audit_volume_cap

Require an explicit volume cap on every audio/video player (Dart players and HTML5 <audio>/<video> / new Audio()). Standards 1, 14.

aadc.audit_sentry_hygiene

Check Sentry initialisation hygiene (e.g. no PII capture, sane sampling). Standards 7, 9.

aadc.audit_hardcoded_url

Flag hardcoded URLs outside the CMS, in Dart and web source. Standards 4, 6.

aadc.audit_policy_mentions_sdks

Warn-only check that the privacy policy names every external-service SDK (Flutter, npm, and Python). Standards 4, 9.

aadc.list_standards

Return the 15 AADC standards with their one-line statutory summaries.

aadc.read_standard

Return the full ICO-published text of one standard.

PASS, WARN, FAIL, and N/A

Each audit reports one of four outcomes. An audit that has zero relevant inputs to inspect (a Dart/web audit on a project with none of those files, or a config-gated audit you haven't enabled) reports [N/A], not a green PASS. N/A means "not applicable", not "passed": "all clean" on a project whose stack an audit does not cover now reads as N/A so you are never lulled into reading a non-result as a compliance tick.

N/A never affects the process exit code or the MCP isError flag. Only a real FAIL on an applicable audit does. The CLI prints a final tally line of the exact form:

2 passed, 1 warnings, 0 failed, 9 not applicable

Each audit result also carries the count of inputs it actually examined (scanned N), and the structured AuditResult shape exposes two optional fields for consumers: applicable (boolean) and scanned (number).

Per-stack coverage

Not every audit fires on every stack. This matrix is what gives real signal today. A blank cell is not a failure: it just means that audit reports N/A on that stack (no inputs to inspect). Read it honestly: a green run is only meaningful for the audits that actually applied.

Audit

Flutter / Dart

Web / JS

Native manifest

Python

permissions

yes

sdks

yes

yes

yes

launchurl

yes

yes

network-isolation

yes

yes

yes

defaults

yes

yes

yes

reading-grade

yes (Info.plist rationale)

placeholders

yes

yes

yes

link-reachability

yes

yes

volume-cap

yes

yes

sentry-hygiene

yes

yes

hardcoded-url

yes

yes

policy-mentions-sdks

yes

yes

yes

Notes:

  • Web / JS means source with a .js, .mjs, .cjs, .jsx, .ts, .tsx, .html, .htm, .vue, or .svelte extension. A vanilla HTML/JS PWA now gets real signal: hardcoded URLs in JS/HTML, HTML5 <audio> / <video> or new Audio() without an explicit volume clamp, and window.open / location / <a target="_blank"> external-navigation escapes.

  • Native manifest means iOS Info.plist and Android AndroidManifest.xml, found anywhere in the tree regardless of layout.

  • reading-grade parses no .dart (or .js) source at all: its only inputs are the iOS Info.plist *UsageDescription rationale strings (shown in the Native-manifest column) and the privacy policy. The privacy policy is config-driven (any path via privacyPolicyPath) and is not tied to a stack, so it does not earn a Flutter/Dart cell.

  • sentry-hygiene only inspects pubspec.yaml (sentry_flutter) and package.json (@sentry/*), then the Dart / JS / TS init source. It never reads requirements.txt or the Python sentry-sdk, so it reports N/A on a Python-only project (hence the blank Python cell).

  • placeholders scans content and source by extension (see below); that set does not include .py or requirements*.txt, so a Python-only project gets no Python-source signal from it (hence the blank Python cell). It still fires on any .md / .json / .yaml / .xml content a Python repo ships.

  • network-isolation, link-reachability, sentry-hygiene, and policy-mentions-sdks are config-gated (see below); they apply to a stack only once enabled, otherwise they report N/A.

Layout-agnostic discovery

reading-grade and policy-mentions-sdks no longer assume an apps/mobile monorepo layout. They walk the whole project for Info.plist / pubspec.yaml / package.json / requirements*.txt, so any layout works. policy-mentions-sdks recognises npm and Python external-service SDKs (Sentry, Firebase / Google Analytics, PostHog, Mixpanel, Amplitude, Segment, Datadog, Hotjar, Stripe, Intercom, and others) in addition to the Flutter ones.

Config-gated audits report N/A, not a skipped WARN

Four audits do nothing useful until you point them at something. When they are not enabled they report [N/A] (not a yellow warn-skip), and each N/A summary names how to switch it on:

  • network-isolation needs protectedPaths.

  • link-reachability needs AADC_CHECK_LINKS (it makes outbound HTTP requests, so it is opt-in).

  • policy-mentions-sdks needs a privacy policy at the configured path.

  • sentry-hygiene needs a Sentry dependency (sentry_flutter or @sentry/*) in the project.

Related MCP server: gridwork-privacy

Install

npm install -g aadc-audit-mcp

Then add to your MCP client config. For Claude Code, edit ~/.claude.json:

{
  "mcpServers": {
    "aadc": {
      "command": "aadc"
    }
  }
}

For Claude Desktop, edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "aadc": {
      "command": "aadc"
    }
  }
}

That's it. Claude will now offer the fifteen aadc.* tools whenever you're working in a project that looks like it might be accessed by children.

CLI mode (no MCP needed)

The same binary doubles as a CLI:

aadc audit ./your-project              # all audits → exit 0 or 1
aadc audit:permissions ./your-project  # one audit
aadc standards                         # list 15 AADC standards
aadc help

Useful for GitHub Actions or any CI that doesn't have Claude in the loop. See workflows/aadc-ci.yml for a drop-in.

Per-project allowlist overrides

Each project has different legitimate dependencies and permissions. Override via env vars (work for both MCP server and CLI):

export AADC_PERM_ALLOWLIST_IOS="NSMicrophoneUsageDescription NSBluetoothAlwaysUsageDescription"
export AADC_PERM_ALLOWLIST_ANDROID="android.permission.RECORD_AUDIO ..."
export AADC_SDK_ALLOWLIST_FLUTTER="flutter just_audio webview_flutter ..."
export AADC_SDK_ALLOWLIST_NPM="@cloudflare/workers-types wrangler ..."
export AADC_SDK_ALLOWLIST_PYTHON="fastapi pydantic ..."
export AADC_PROTECTED_PATHS="path/to/sensitive/code/dir ..."
export AADC_TRUSTED_HOSTS="yourapp.com partner.org apps.apple.com ..."
export AADC_FIRST_PARTY_ORIGINS="yourapp.com help.yourapp.com ..."

aadc audit .

AADC_TRUSTED_HOSTS sets the host suffixes the link-reachability audit will probe. It defaults to common app-store, video, and forms platforms plus the ICO; supply your own list (your app domains, partner sites, kit vendors, etc) to override it.

AADC_FIRST_PARTY_ORIGINS declares your own site host(s) so a launchUrl / <a target="_blank"> / window.open to your own help pages is treated as first-party and is not flagged as an external escape.

The path/value overrides apply to web source as well as Dart. AADC_PARENT_AREA_PATHS (env or MCP) marks post-parent-gate surfaces that may legitimately open the OS browser, and the MCP-only allowlists urlExemptPaths / urlExemptValues (for hardcoded-url) and volumeCapExempt (for volume-cap) now match across .js / .ts / .html / .vue / .svelte as well as .dart.

When called via MCP, the same overrides can be passed as allowlists.{ios,android,flutter,npm,python,protectedPaths,trustedHosts,firstPartyOrigins,parentAreaPaths,urlExemptPaths,urlExemptValues,volumeCapExempt} in the tool arguments, useful when Claude is running the audit on behalf of a project with project-specific allowlists.

Why MCP, why local, why kid-app-specific

  • Local-only is the whole point. A compliance tool that uploads your source code to a third-party SaaS is a non-starter for a kids-app product. The MCP runs as a subprocess on the user's machine and never reaches the network.

  • MCP gives Claude (or any MCP-capable AI client) structured function calls. Instead of "Claude reads your repo and tries to remember the AADC", Claude calls aadc.audit_all and gets a machine-shaped result it can paste straight into a PR description, GitHub issue, or conformance statement.

  • Kid-app-specific because the existing compliance market is enterprise-only. Paid third-party auditors (TestPros, BBB National Programs) start at five figures. Enterprise compliance SaaS (OneTrust, Securiti AI) assumes you have a legal team to configure them. Small kids apps need a drop-in toolkit. This is that toolkit.

What it doesn't do

  • Doesn't make legal warranties. Best-effort technical scaffolding. A regulator query may still require a paid third-party auditor.

  • Doesn't automate the 6 judgement-based standards (1 best-interests, 2 DPIA, 3 age-appropriate application, 12 profiling, 13 nudges, 15 online tools). For those, use the conformance-statement template under templates/ and let Claude fill it in by reading your code + the ICO text.

Repo contents

aadc-audit-mcp/
├── README.md, LICENSE
├── package.json, tsconfig.json
├── src/
│   ├── cli.ts                 (dual-mode entry: MCP server OR CLI)
│   ├── server.ts              (MCP server: 15 tools)
│   ├── standards.ts           (ICO AADC text loader)
│   └── audits/                (12 audit modules + support files)
│       ├── index.ts           (registry)
│       ├── types.ts           (AuditResult, AuditOptions)
│       ├── walk.ts            (fs traversal)
│       ├── web-source.ts      (shared web-file discovery + comment stripping)
│       ├── permissions.ts     (Standards 8, 10)
│       ├── sdks.ts            (Standards 5, 9, 12, 13)
│       ├── launchurl.ts       (Standards 11, 14)
│       ├── network-isolation.ts (Standard 8)
│       ├── defaults.ts        (Standard 7)
│       ├── reading-grade.ts   (Standards 4, 11)
│       ├── placeholders.ts    (Standards 4, 6)
│       ├── link-reachability.ts (Standards 4, 6)
│       ├── volume-cap.ts      (Standards 1, 14)
│       ├── sentry-hygiene.ts  (Standards 7, 9)
│       ├── hardcoded-url.ts   (Standards 4, 6)
│       └── policy-mentions-sdks.ts (Standards 4, 9)
├── aadc/                      (canonical ICO text mirror)
│   ├── 1-best-interests-of-the-child.md
│   ├── ... (15 standards + executive summary)
│   └── fetch.sh               (refresh from ico.org.uk)
├── templates/
│   ├── AUDIT.md
│   ├── conformance-statement.md
│   ├── privacy-policy.md
│   └── incident-response.md
├── workflows/
│   └── aadc-ci.yml            (drop-in GitHub Actions workflow)
├── examples/
│   └── README.md              (per-language overrides cookbook)
├── tests/                     (node:test suite + tests/fixtures/ project trees)
└── legacy-bash/
    └── ...                    (original bash implementation; kept for
                                projects that can't depend on Node)

The 15 standards are broadly aligned with the new US state laws modelled on the UK AADC (California, South Carolina, Vermont, Nebraska, Maryland as of 2026). The audits here are a good starting point in those jurisdictions, but state-specific deltas should be reviewed separately.

Licence

MIT. The ICO Children's Code text mirrored under aadc/ is published under the Open Government Licence v3.0. See LICENSE.

Development

npm run build   # compile src/ to dist/ via tsconfig.json
npm test        # compile via tsconfig.test.json and run the suite

npm test compiles the tests with tsconfig.test.json and runs node:test against fixture project trees under tests/fixtures/. It adds no new dependencies (it uses Node's built-in test runner), so it runs anywhere the tool itself runs.

Contributing

The most useful contributions:

  • More language adapters (the audits cover Flutter, Node, Python, and vanilla web/JS today; React Native specifics, iOS-Swift-only, Android-Kotlin-only, .NET MAUI would all help).

  • New checks aligned to AADC standards we haven't automated (Standard 13 nudge-pattern detector especially).

  • Diff-against-ICO improvements to aadc/fetch.sh so wording drift surfaces as a structured PR.

  • More fixtures under tests/fixtures/ covering stacks and edge cases the current suite doesn't.

Open issues / PRs at https://github.com/Paul-PSDigital/aadc-audit-mcp.

aadc-audit-mcp

Available Tools

15 tools
aadc.audit_allA

Run every AADC compliance audit against a local project and return the consolidated result. Use this whenever the user asks for a full AADC review of a kids app, or before a store submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description bears full burden for behavioral disclosure. It states it runs all audits and returns a consolidated result, but does not disclose whether it modifies the project, permission requirements, or performance implications. While not misleading, it lacks details that would help an agent assess risks or side effects.

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 two sentences: one clearly stating functionality, one providing usage guidance. No redundant words, front-loaded with the core action. Every sentence earns its place.

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

Completeness3/5

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

While the schema covers parameters and the description states purpose, the tool is an aggregate that runs multiple sub-audits. The output format is only vaguely described as 'consolidated result'. Given no output schema, the description could clarify the structure (e.g., list of individual audit results) to help the agent process the response. Adequate but not complete.

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?

Schema description coverage is 100%, so baseline is 3. The description does not add any information about parameters beyond what the schema already provides (projectRoot as absolute path, allowlists as per-language overrides). No additional semantic clarity from the description.

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 description clearly states the tool runs every AADC compliance audit and returns a consolidated result, using specific verb 'run' and resource 'AADC compliance audits'. It distinguishes itself from sibling individual audit tools (e.g., aadc.audit_defaults) by being the aggregate version.

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

Usage Guidelines5/5

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

The description explicitly states when to use: 'whenever the user asks for a full AADC review of a kids app, or before a store submission.' This provides clear context and implicitly directs users to sibling tools for specific audits.

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

aadc.audit_defaultsB

Heuristic warn-only scan for default-true on suspicious privacy keys (share / track / profile / etc). Standard 7.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

B3.4/5.0
Behavior3/5

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

The description indicates a 'warn-only scan' implying non-destructive behavior, but with no annotations, more detail would be beneficial—e.g., what gets scanned, performance impact, or result handling.

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

Conciseness4/5

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

Single sentence with key information front-loaded. Very concise, though the term 'Standard 7' may be obscure.

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

Completeness3/5

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

Adequately describes the tool's scope and non-destructive nature, but lacks explanation of 'Standard 7' and expected output format, which could hinder effective use.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning to the parameters beyond what the schema already provides.

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 description clearly states a specific verb ('scan') and resource ('default-true on suspicious privacy keys'), and distinguishes from siblings by referencing 'Standard 7' and a heuristic warn-only approach.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus sibling audits like aadc.audit_all or aadc.audit_permissions. The description lacks explicit context for usage or alternatives.

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

aadc.audit_hardcoded_urlB

Flag hardcoded URLs outside the CMS that bypass content review. Standards 4, 6.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description only states it flags URLs but does not disclose behavioral traits such as whether it modifies files, requires authentication, or what the output format is. Missing context on side effects or error conditions.

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 extremely concise (two sentences) and front-loads the core purpose. Every sentence is essential with no filler.

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

Completeness2/5

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

Given no output schema, no annotations, and nested objects in params, the description lacks completeness. It does not explain the return values, how standards 4 and 6 are applied, or provide examples, leaving the agent underinformed for correct invocation.

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?

Schema coverage is 100%, and the description does not add additional meaning beyond what is already in the input schema. The description does not elaborate on the parameters, so it meets baseline but does not enhance understanding.

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 description clearly states it flags hardcoded URLs outside the CMS that bypass content review, and references specific standards (4, 6). This distinguishes it from other audit siblings like aadc.audit_launchurl or aadc.audit_permissions.

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

Usage Guidelines3/5

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

The description implies usage for detecting hardcoded URLs bypassing CMS review, but does not explicitly state when to use or not use this tool vs alternatives like aadc.audit_all or aadc.audit_link_reachability.

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

aadc.audit_launchurlA

Audit Dart launchUrl() calls so kid-facing files use the safe-link helper and only declared parent-area paths may open the external browser. Standards 11, 14.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry full burden. It states the purpose but does not disclose behavioral traits such as read-only nature, required permissions, error conditions, or return behavior. For an audit tool, these are important contextual hints.

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?

Single sentence efficiently conveys purpose and standards. No fluff, front-loaded with key action ('audit') and resource ('Dart launchUrl() calls').

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

Completeness3/5

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

Description explains the audit target and constraints but does not describe the output format (e.g., list of violations, pass/fail). No output schema exists, so the description should provide some expectation of results. References to standards 11 and 14 are unelaborated.

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?

Schema coverage is 100% (both parameters have descriptions in the schema). The tool description adds no additional parameter meaning beyond what the schema already provides, so baseline 3 is appropriate.

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 description clearly states the tool audits Dart launchUrl() calls for safe-link helper usage and external browser path restrictions. It references specific standards (11 and 14), distinguishing it from sibling audit tools by specifying a focused scope.

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

Usage Guidelines3/5

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

The description implies the tool is used when auditing launchUrl calls for compliance with standards 11 and 14, but does not explicitly state when to use it versus alternatives like aadc.audit_all or aadc.audit_hardcoded_url. No when-not-to-use guidance is provided.

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

aadc.audit_network_isolationC

Audit declared protected paths (microphone, camera, on-device-only data) for any network API import. Standard 8.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states the audit action without detailing side effects, permissions, or output, leaving significant gaps.

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

Conciseness3/5

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

Description is a single sentence, very concise but lacks necessary details. It front-loads the purpose but is too brief to be fully informative.

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

Completeness2/5

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

Given the absence of annotations and output schema, the description should provide more context. It fails to explain the audit process, the role of allowlists, or what the output represents, making it incomplete.

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?

Schema coverage is 100% with descriptions for both parameters. The tool description adds no additional meaning beyond the schema; it only mentions Standard 8 which does not relate to parameters.

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

Purpose4/5

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

Description clearly states it audits protected paths (microphone, camera, on-device-only data) for network API imports and mentions Standard 8. However, it does not distinguish from sibling audit tools like aadc.audit_all or aadc.audit_defaults.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description lacks context on when to apply this audit or when not to, leaving the agent without decision support.

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

aadc.audit_permissionsB

Audit native iOS Info.plist and Android AndroidManifest.xml for any permission outside the AADC-safe allowlist. Standards 8, 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

B3.2/5.0
Behavior3/5

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

The description states the tool audits for permissions outside an allowlist, implying a read-only operation. With no annotations provided, the description carries the full burden, but it lacks details on error handling, file existence assumptions, or side effects. It is minimally adequate.

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

Conciseness4/5

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

The description is a single sentence that conveys the core purpose and scope. It is concise and front-loaded, but could be slightly more structured without adding length.

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

Completeness3/5

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

The tool has two optional parameters and no output schema. The description explains the input files and allowlist concept but does not describe return values or error handling. It is adequate for a simple audit tool but lacks completeness for an agent to fully understand behavior.

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?

Schema coverage is 100%, with both parameters adequately described in the schema. The description does not add extra meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies the tool's purpose: auditing native iOS Info.plist and Android AndroidManifest.xml for permissions outside an allowlist. It also references standards 8 and 10. However, it does not explicitly differentiate from sibling audit tools, though the specific file types provide some distinction.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool versus other audit tools (e.g., audit_all, audit_defaults). No when-not-to-use or alternative suggestions are given. The agent would need to infer usage from the tool's specific focus on permissions.

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

aadc.audit_placeholdersC

Scan for unreplaced placeholder content (lorem ipsum, TODO copy, dummy text) in shipped user-facing strings. Standards 4, 6.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It mentions scanning in 'shipped user-facing strings' but does not clarify if the tool is read-only, destructive, or any side effects. The description lacks details on behavior beyond the scan action.

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

Conciseness4/5

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

The description is a single concise sentence that covers the core purpose. It is front-loaded and direct, though it could benefit from a slight structure like listing the placeholders checked.

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

Completeness2/5

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

Given the tool has 2 parameters (including a nested object) and no output schema, the description should explain what the tool returns or how to interpret results. It does not mention output format, error conditions, or help for the allowlists parameter, leaving gaps for an agent.

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?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no additional meaning beyond what is in the schema. Baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool scans for unreplaced placeholder content like lorem ipsum, TODO copy, and dummy text, and references standards 4 and 6. However, it does not explicitly differentiate from sibling tools like audit_all or audit_defaults.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, no exclusions, and no context about prerequisites or typical use cases. It only states what it does, not when to use it.

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

aadc.audit_policy_mentions_sdksA

Warn-only check that the privacy policy names every external-service SDK the app depends on. Standards 4, 9.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

A3.7/5.0
Behavior3/5

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

The description states it is a 'Warn-only check', which indicates non-destructive behavior. However, with no annotations provided, it fails to disclose other behavioral traits such as what happens if the policy is missing, how SDK dependencies are detected, or any side effects.

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?

A single, concise sentence that clearly conveys the tool's purpose without extraneous information. Every part earns its place.

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

Completeness3/5

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

The description is adequate for a simple audit check with only two parameters. However, it lacks details about what 'Standards 4, 9' refer to and does not explain the return format or behavior when issues are found. Could be more complete.

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 has 100% description coverage for both parameters (projectRoot, allowlists). The description adds context ('privacy policy', 'external-service SDKs') but does not enhance understanding beyond the schema. Baseline 3 is appropriate.

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 description clearly states it is a 'Warn-only check that the privacy policy names every external-service SDK the app depends on', providing a specific verb (check) and resource (privacy policy vs SDKs). It also references 'Standards 4, 9' which differentiates it from other audit tools like 'aadc.audit_sdks' or 'aadc.audit_defaults'.

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

Usage Guidelines3/5

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

The description implies usage contexts (privacy policy checks) but provides no explicit guidance on when to use this tool versus alternatives (e.g., 'aadc.audit_sdks') or when not to use it. No exclusions or prerequisites are mentioned.

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

aadc.audit_reading_gradeB

Audit user-facing copy for reading grade above the age-appropriate threshold. Standards 4, 11.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states 'audit' (likely non-destructive) but does not disclose whether the tool modifies files, generates reports, or requires specific permissions. Behavioral details like output format or side effects are missing.

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

Conciseness4/5

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

The description is a single sentence, highly concise. It front-loads the key action and scope, though it could benefit from a brief note on output or return value to improve structure without adding length.

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

Completeness3/5

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

With no output schema, the description should clarify what the tool returns or produces, but it does not. The reference to standards is modestly helpful given sibling tools for reading standards. Overall, the description is adequate but leaves gaps about outputs and deeper context.

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?

Schema coverage is 100%, so the description does not need to add parameter details. The description does not provide extra meaning beyond the schema, meeting the baseline of 3.

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

Purpose4/5

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

The description clearly identifies the tool's purpose: auditing user-facing copy for reading grade above an age-appropriate threshold, referencing specific standards (4, 11). This distinguishes it from sibling audit tools, though the exact meaning of the standards is not elaborated.

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

Usage Guidelines3/5

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

The description implies usage for reading grade audits by naming the action and standards, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. Given the sibling tools list, the agent can infer specialization, but explicit guidance is absent.

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

aadc.audit_sdksA

Audit dependency manifests (pubspec.yaml, package.json, requirements.txt) for analytics / advertising / tracking SDKs or any dependency outside the allowlist. Standards 5, 9, 12, 13.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states the tool audits for specific SDKs and outside allowlist, but does not disclose whether it modifies files, what happens on success/failure, or other behaviors like output format or error handling. For a tool with no annotations, this is insufficient transparency.

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 a single sentence that efficiently communicates the main action, target files, and what it audits for. It is front-loaded with the verb and resource, and every part is informative with no redundancy.

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

Completeness3/5

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

Given the tool has 2 parameters (one nested object) and no output schema, the description adequately covers the purpose and what it checks, but lacks details on output format, how the allowlist parameter works, and how it integrates with sibling tools. It is sufficient but not comprehensive.

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?

Schema description coverage is 100%, so baseline is 3. The description does not add meaning beyond the parameter names and schema descriptions. It does not explain how allowlists work or provide examples, so it adds no extra value over the schema.

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 description clearly states the verb 'Audit' and the specific resource 'dependency manifests (pubspec.yaml, package.json, requirements.txt)'. It further specifies what it audits for: analytics/advertising/tracking SDKs or any dependency outside the allowlist, distinguishing it from sibling audit tools by its focus on SDKs and allowlists.

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

Usage Guidelines3/5

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

The description implies usage for auditing SDK dependencies against allowlists, referencing Standards 5,9,12,13, but it does not explicitly state when to use this tool versus alternatives like aadc.audit_all or aadc.audit_defaults. There is no guidance on when not to use it or what prerequisites are needed.

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

aadc.audit_sentry_hygieneB

Audit Sentry error-reporting initialisation for child-data hygiene (PII scrubbing, no session replay). Standards 7, 9.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It does not state whether the tool is read-only, requires specific permissions, or has side effects. The term 'Audit' implies read-only, but this is not explicitly confirmed.

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 a single, front-loaded sentence that conveys the essential purpose without extraneous detail. Every word contributes to meaning, making it highly concise and efficient.

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

Completeness3/5

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

Given the tool's simplicity (2 optional params, no output schema, no annotations), the description covers the core purpose but lacks details on return format, behavior, or how to interpret results. It is adequate but not comprehensive.

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 has 100% coverage, describing both parameters adequately. The description adds marginal value by referencing 'Standards 7, 9' but does not elaborate on parameter usage or provide semantic meaning beyond the schema.

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 description clearly states the tool audits 'Sentry error-reporting initialisation for child-data hygiene' with specific concerns (PII scrubbing, no session replay) and references 'Standards 7, 9'. This distinguishes it from sibling audit tools that target different resources or standards.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool over sibling audit tools (e.g., audit_all, audit_sdks) or any prerequisites. It only states what the tool does without contextual usage instructions.

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

aadc.audit_volume_capB

Verify every audio/video player declares an explicit volume cap. Standards 1, 14.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoAbsolute path to the target project root. Defaults to the current working directory.
allowlistsNoPer-language allowlist overrides (e.g. ios, android, flutter, npm, python, protectedPaths). Each value is an array of strings.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does not disclose whether the tool modifies files, requires permissions, or handles non-compliance. The audit nature implies read-only behavior, but this is not explicitly stated, leaving ambiguity.

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 a single, concise sentence that quickly conveys the tool's purpose. It is front-loaded and contains no redundant information, earning its place.

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

Completeness4/5

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

For a tool with no output schema and standard parameters, the description sufficiently covers the audit purpose. However, it could be more complete by indicating what the tool returns (e.g., a report of violations or success) or how failures are handled. Slight gap given absence of 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?

Schema description coverage is 100% for both parameters, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides (projectRoot and allowlists are self-explanatory).

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 description clearly states the tool verifies that every audio/video player declares an explicit volume cap, referencing specific standards (1 and 14). It uses a specific verb ('verify') and resource ('audio/video player volume cap'), distinguishing it from sibling audit tools like audit_network_isolation or audit_hardcoded_url.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as other audit tools. It does not specify prerequisites, exclusions, or situational context, leaving the agent without decision-making support.

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

aadc.list_standardsA

Return the 15 AADC standards with their one-line statutory summaries. Use this as a reference when filling in a conformance statement.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses the tool returns 15 standards with one-line summaries, implying it is a read-only operation. It does not mention format or performance, but for a simple list tool, it is sufficiently transparent.

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?

Two concise sentences with zero wasted words. The main action ('Return the 15 AADC standards') is front-loaded, and usage guidance is provided succinctly.

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 simple listing tool with no parameters and no output schema, the description provides all necessary information: what is returned (15 standards with one-line summaries) and when to use it (filling conformance statements). No gaps.

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

Parameters4/5

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

There are zero parameters, so schema coverage is 100%. The description adds no parameter information because none is needed, meeting the baseline expectation for a parameterless tool.

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 description clearly states it returns 'the 15 AADC standards with their one-line statutory summaries', using a specific verb ('Return') and resource ('AADC standards'). It distinguishes from sibling tools like aadc.read_standard, which likely returns a single standard, and audit tools that perform different actions.

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 explicitly advises using this tool 'as a reference when filling in a conformance statement', providing clear usage context. It does not explicitly state when not to use it or name alternatives, but the sibling context implicitly covers that.

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

aadc.read_standardA

Return the full ICO-published text of one AADC standard by number (1-15). Use this when you need the verbatim wording for a conformance statement or DPIA.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It implies a read-only operation by stating 'return the full text,' but does not explicitly declare it as non-destructive or disclose any side effects. Adequate but minimal.

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?

Two short sentences, front-loaded with the action and resource. Every word adds value; no fluff. Ideal conciseness for a simple tool.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, no output schema), the description is complete enough: it explains purpose, parameter range, and usage. Could note return format (text string), but not essential.

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

Parameters4/5

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

Schema coverage is 0%, so the description adds crucial meaning: 'by number (1-15)' matches schema constraints and clarifies the parameter's role. It explains what the number represents (the standard number), going beyond the bare schema.

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

Purpose4/5

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

The description clearly states the action (return full text) and resource (AADC standard by number 1-15). It distinguishes from sibling tools implicitly by specifying retrieval of full text, while a sibling lists standards.

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?

Explicit usage context is provided: 'Use this when you need the verbatim wording for a conformance statement or DPIA.' This gives clear guidance, though it does not mention when not to use it or alternative tools.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv0.3.0
    • First observedaadc.audit_all
    • First observedaadc.audit_defaults
    • First observedaadc.audit_hardcoded_url
    • First observedaadc.audit_launchurl
    • First observedaadc.audit_link_reachability
    • First observedaadc.audit_network_isolation
    • First observedaadc.audit_permissions
    • First observedaadc.audit_placeholders
    • First observedaadc.audit_policy_mentions_sdks
    • First observedaadc.audit_reading_grade
    • First observedaadc.audit_sdks
    • First observedaadc.audit_sentry_hygiene
    • First observedaadc.audit_volume_cap
    • First observedaadc.list_standards
    • First observedaadc.read_standard

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation5/5

Each audit tool targets a distinct compliance check (e.g., hardcoded URLs, permissions, SDKs), and the two reference tools serve unique non-audit purposes. No two tools overlap in function.

Naming Consistency5/5

All tools follow the 'aadc.audit_<topic>' pattern in snake_case, with reference tools using 'aadc.list_standards' and 'aadc.read_standard'. The naming is uniform and predictable.

Tool Count5/5

With 15 tools covering 13 distinct audits plus two reference tools, the count is well-scoped for a compliance auditing server. Each tool earns its place without bloat.

Completeness5/5

The server covers major AADC audit areas (defaults, URLs, permissions, SDKs, etc.) and includes a full scan tool. Reference tools for standards complete the surface. No obvious gaps for its stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers