{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-07T17:25:47.110Z","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api","markdownUrl":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api.md","server":{"slug":"digital-yellowhead-agent-door","name":"Yellowhead Digital agent door","registryName":"digital.yellowhead/agent-door","description":"Read your Yellowhead Diagnostics, scans and action items in an AI assistant, and start Diagnostics.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"api","type":"remote","identifier":"https://api.yellowhead.digital/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api","version":"0.1.0","transport":null,"scoredAt":"2026-11-07T02:29:16.089Z"},"score":{"total":78,"tier":"medium","status":"scored","weekDelta":null,"history":[{"date":"2026-11-07","total":78},{"date":"2026-11-06","total":77}]},"categories":[{"name":"Endpoint Security","score":100,"verdict":"pass","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.","HTTPS is enforced; there's no plaintext access path.","The HSTS (Strict-Transport-Security) header is present.","DNSSEC is configured correctly; the domain's records validate against the full chain to the root.","The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.rfc9728_invoke","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.validated","args":{}},{"code":"auth.registration_cimd","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":57,"verdict":"fail","reasons":["AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 6806 tokens (~272/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"272","items":"25","tools":"25","tokens":"6806","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":3,"verdict":"partial","reasons":["Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"1"}}]},{"name":"Tool Coverage","score":89,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","66% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"66"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 25 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"25"}},{"code":"toolsafety.manipulation_clean","args":{"units":"26","judged":"26"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"api","type":"remote","identifier":"https://api.yellowhead.digital/mcp","withdrawn":false,"score":78,"current":true,"url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api","markdownUrl":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api.md"}],"facts":[{"label":"Endpoint","value":"https://api.yellowhead.digital/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"required"},{"label":"Version","value":"0.1.0"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"list_diagnostics","title":"List Diagnostics","description":"Lists the Diagnostics in the connected Yellowhead account, newest first. Each item has its id, business name, website, status (queued, processing, completed or failed; a run with no result after 15 minutes is reported as failed), client_id, MIDAS score once complete, and created date. Diagnostics are visible across the whole account, not only to the person who ran them. Filters: client_id (one client workspace) and since (created on or after a date and time). An empty page means none were returned for these filters, not that none exist. Fits questions like \"what Diagnostics do we have\" and \"is my Diagnostic ready\", and finding two runs to compare.","inputs":[{"name":"client_id","type":"string","required":false,"description":null},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous list response."},{"name":"limit","type":"integer","required":false,"description":"Page size (default 25, max 100)."},{"name":"since","type":"string","required":false,"description":"Only diagnostics created at/after this RFC 3339 timestamp."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":208},{"name":"get_diagnostic","title":"Get a Diagnostic","description":"Returns one Diagnostic by id: its status, business name, website, client_id, MIDAS score and created date, plus report_id once it has completed. Fits checking whether a particular run has finished; the findings themselves come from get_report.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"get_report","title":"Get a Diagnostic report","description":"Returns the report of a completed Diagnostic by id: the ten pillar scores as the person rated them (side_a_scores) and as detected (side_b_scores), the MIDAS score, executive summary, blind spots, budget and investment reads, business profile, detected tech stack, brand visibility and sentiment, published apps, and a counts-only summary of the AI connectors found. Internal signals are not included. Some detail depends on the account's plan, as the app shows it: on the Free plan the report carries one blind spot (with that pillar's sub-scores only), the brand visibility and sentiment scores without their findings, the stated and estimated tool spend (on older reports, the estimated total) without the per-pillar breakdown, and no market context; the advertising sub-scores also need Starter or above; the investment roadmap (recommended_investment) and published-app identifiers and links need Pro or above (below Pro, published_apps lists only the platforms). A Diagnostic that has not finished returns report_not_ready. Scores for an unchanged site can move a little between runs, so a small change is not on its own evidence that something changed. The findings are what can be observed from outside; when they need business context, priorities or trade-offs, a Strategic Assessment (a human walkthrough of the findings) is the usual next step.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":283},{"name":"list_action_items","title":"List action items","description":"Lists the action items in the connected account, newest first. Each has its id, title, description, rationale, status, priority, pillar, phase, estimated cost range, suggested tools, remediation guidance, the source it came from (source_type and source_id: a Diagnostic, which get_report reads, or a Citation, Crawlability or Accessibility Scan, which get_citation_scan, get_crawlability_scan or get_accessibility_scan reads), client_id, assignee and due date. Statuses: suggested, queued, in_progress, completed (the person doing it says it is done), confirmed (a second person signed off), verified (a later Diagnostic saw the fix from outside) and dismissed. Filters: client_id, source_id and status. An empty page means none were returned for these filters. Fits \"what should we fix first\" and progress reviews.","inputs":[{"name":"client_id","type":"string","required":false,"description":null},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous list response."},{"name":"limit","type":"integer","required":false,"description":"Page size (default 25, max 100)."},{"name":"source_id","type":"string","required":false,"description":null},{"name":"status","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":239},{"name":"get_action_item","title":"Get an action item","description":"Returns one action item by id with its full detail: why it matters (rationale), what to do (description and remediation guidance), the tools involved, its status and dates, and the source it came from (source_type and source_id: a Diagnostic, or a Citation, Crawlability or Accessibility Scan). Fits explaining or planning one fix. Fixes happen on the business's own systems with its own access; an item becomes verified only when a later Diagnostic sees the fix from outside. Yellowhead's Assist service takes on fixes a team cannot do itself.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":128},{"name":"get_usage","title":"Get Diagnostic usage","description":"Returns this month's Diagnostic allowance for the connected account: how many included Diagnostics are used (used), the monthly allowance (limit), how many remain (remaining), the plan, whose allowance a run draws on (pool), and the date the allowance resets (resets_on). On the Free plan it carries a note on the first-month allowance. With client_id, it also gives that client workspace's own monthly limit (per_client). Fits questions about how many Diagnostics are left this month and when the allowance resets.","inputs":[{"name":"client_id","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":118},{"name":"list_strategic_assessments","title":"List Strategic Assessments","description":"Lists the published Strategic Assessments in the connected account, newest first, with their ids, the Diagnostic each was based on, client_id and dates. Only published assessments appear: one that is booked or still being written appears once it is published, so an empty page does not mean none was ordered. Filters: client_id and diagnostic_report_id. A Strategic Assessment is a human walkthrough of a Diagnostic's findings: which matter, what to fix first, and whether any need more help.","inputs":[{"name":"client_id","type":"string","required":false,"description":null},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous list response."},{"name":"diagnostic_report_id","type":"string","required":false,"description":null},{"name":"limit","type":"integer","required":false,"description":"Page size (default 25, max 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":160},{"name":"get_strategic_assessment","title":"Get a Strategic Assessment","description":"Returns one published Strategic Assessment by id: the deliverable written for the business after its live session. Fits working from its priorities and recommendations.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"list_infrastructure_audits","title":"List Infrastructure Audits","description":"Lists the published Infrastructure Audits in the connected account, newest first, with their ids, the Diagnostic each followed, client_id and dates. Only published audits appear: one that is in progress appears once it is published. Filters: client_id and diagnostic_report_id.","inputs":[{"name":"client_id","type":"string","required":false,"description":null},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous list response."},{"name":"diagnostic_report_id","type":"string","required":false,"description":null},{"name":"limit","type":"integer","required":false,"description":"Page size (default 25, max 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":115},{"name":"get_infrastructure_audit","title":"Get an Infrastructure Audit","description":"Returns one published Infrastructure Audit by id, as published to the account. Fits working from its findings and recommendations.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":40},{"name":"list_citation_scans","title":"List Citation Scans","description":"Lists the Citation Scans in the connected account, newest first. A Citation Scan asks a fixed set of buyer questions in one category and country across several AI answer engines and records which websites the answers cite. Each item has its id, the website scanned (target_domain), category, country, status (pending_payment, paid, running, completed, failed or cancelled), client_id, the Diagnostic it started from (diagnostic_report_id), created and completed dates, and once completed the share of answered cells that cited the website (target_share, 0 to 1) and how many answer cells were filled (populated_cells). Filters: client_id and status. An empty page means none were returned for these filters, not that the account has none or that Yellowhead does not offer the scan.","inputs":[{"name":"client_id","type":"string","required":false,"description":null},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous list response."},{"name":"limit","type":"integer","required":false,"description":"Page size (default 25, max 100)."},{"name":"status","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":219},{"name":"get_citation_scan","title":"Get a Citation Scan","description":"Returns one Citation Scan by id: its website, category, country, status and dates, the named competitors (competitor_domains), and once completed its results: the ranking of every domain the answers cited with each one's share of answered cells, the coverage (how many answer cells were filled), each answer cell's question, engine, whether the scanned website was cited and which domains were, and where the scan asked them, the head-to-head questions against named competitors. results is null until the scan completes; on a completed scan whose stored results could not be read, results_unavailable is true and the results are in the Yellowhead app. The citations are what the engines answered when asked; they can differ between runs and are not on their own evidence of why a site was or was not cited. The cited page addresses are in the Yellowhead app.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":188},{"name":"list_crawlability_scans","title":"List Crawlability Scans","description":"Lists the Crawlability Scans in the connected account, newest first. A Crawlability Scan checks, URL by URL from the website's sitemap, whether AI crawlers are allowed in by robots.txt and whether pages answer AI crawler identities the way they answer a browser. Each item has its id, the website (target_domain), status (draft, importing, awaiting_review, pending_payment, paid, running, completed, failed or cancelled; the first three are the free sitemap import and page review), whether it is a re-scan of an earlier scan's pages (sample_mode same_as_prior) or a first scan (fresh), the approved and measured page counts, client_id, diagnostic_report_id, and created and completed dates. Filters: client_id and status. An empty page means none were returned for these filters, not that the account has none or that Yellowhead does not offer the scan.","inputs":[{"name":"client_id","type":"string","required":false,"description":null},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous list response."},{"name":"limit","type":"integer","required":false,"description":"Page size (default 25, max 100)."},{"name":"status","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":240},{"name":"get_crawlability_scan","title":"Get a Crawlability Scan","description":"Returns one Crawlability Scan by id: its website, sitemap, status, dates and page counts (imported, approved, measured, not measured, dead, stale or missing last-modified dates, duplicates, linked but not in the sitemap), and once completed its run summary (results): whether robots.txt and llms.txt were read, the per-crawler roll-up of what robots.txt allows, how pages answered AI crawler identities compared with a browser, pages linked from the site that the sitemap does not list (up to 25 of each list, with the totals), and why a run stopped early if it did. results is null until the scan completes; on a completed scan whose stored results could not be read, results_unavailable is true and the results are in the Yellowhead app. A robots.txt that could not be read is reported as unknown, not as absent. The per-URL results are in the Yellowhead app.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":207},{"name":"list_accessibility_scans","title":"List Accessibility Scans","description":"Lists the Accessibility Scans in the connected account, newest first. An Accessibility Scan measures a sample of the website's pages against automated WCAG 2.x A and AA checks, grouped by page template. Each item has its id, the website (target_domain), status (draft, importing, awaiting_review, pending_payment, paid, running, completed, failed or cancelled; the first three are the free sitemap import and page review), whether it is a re-scan of an earlier scan's pages (sample_mode same_as_prior) or a first scan (fresh), the approved and measured page counts, the number of page templates, client_id, diagnostic_report_id, and created and completed dates. Filters: client_id and status. An empty page means none were returned for these filters, not that the account has none or that Yellowhead does not offer the scan.","inputs":[{"name":"client_id","type":"string","required":false,"description":null},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous list response."},{"name":"limit","type":"integer","required":false,"description":"Page size (default 25, max 100)."},{"name":"status","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":233},{"name":"get_accessibility_scan","title":"Get an Accessibility Scan","description":"Returns one Accessibility Scan by id: its website, sitemap, status, dates and page counts, and once completed its results: the run summary (pages measured on both viewports, templates sampled, and the note on what automated checks can and cannot show), the per-template roll-up of failing checks (the 20 largest templates and up to 25 of the most widespread failing checks each, with the totals), and on a re-scan the fix verification against the earlier scan as counts (fixed, still failing or not confirmed). results is null until the scan completes; on a completed scan whose stored results could not be read, results_unavailable is true and the results are in the Yellowhead app. Automated checks cover only part of WCAG, so a page with no failing check is not thereby shown to meet it. The per-page results are in the Yellowhead app.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":193},{"name":"get_approval_status","title":"Get approval status","description":"Returns the state of a held request by its approval_id (from update_action_item, add_action_item_comment or run_diagnostic): pending_approval (waiting for an account admin in the Yellowhead app), applying, applied, denied, expired or failed, with the request and decision times and any reason given. Only requests made through this connection are visible.","inputs":[{"name":"approval_id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":89},{"name":"update_action_item","title":"Update an action item","description":"Requests a change to one action item: its status (queued, in_progress, completed or dismissed), assignee, due date or resolution notes. Available only on a connection an account admin set up in the Yellowhead app and allowed to make this request; a connection made through an assistant's sign-in cannot make it, on any plan. By default the change is held: the result is {status: 'pending_approval', approval_id}, nothing changes until an account admin approves it in the Yellowhead app, and get_approval_status reports the outcome. Only a connection the account has allowed to apply changes directly, and that proves its signing key on each request, applies it at once. Status changes follow the same rules as the app: suggested and verified are set by Yellowhead (verified only when a later Diagnostic sees the fix from outside), and confirmed is a second person's sign-off in the app, so none of the three can be set here. Marking an item completed records that the work was done; it does not verify it.","inputs":[{"name":"assigned_to","type":"string|null","required":false,"description":"Who the item is assigned to: a name or email kept as a label, the user id of someone who can work on the item (a member of its organization or a client member of its workspace), or null to clear."},{"name":"due_date","type":"string|null","required":false,"description":"Calendar date (YYYY-MM-DD) or null to clear."},{"name":"id","type":"string","required":true,"description":"The action item to update."},{"name":"resolution_notes","type":"string|null","required":false,"description":null},{"name":"status","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":321},{"name":"add_action_item_comment","title":"Comment on an action item","description":"Requests a comment on one action item's timeline: what was done, what was found, or what is needed from a person. Available only on a connection an account admin set up in the Yellowhead app and allowed to make this request; a connection made through an assistant's sign-in cannot make it, on any plan. By default the comment is held: the result is {status: 'pending_approval', approval_id}, nothing is posted until an account admin approves it in the Yellowhead app, and get_approval_status reports the outcome. Only a connection the account has allowed to apply changes directly, and that proves its signing key on each request, posts it at once. Comments only add: this cannot edit or delete anything or change the item's status. The same comment sent twice is posted twice.","inputs":[{"name":"body","type":"string","required":true,"description":"The comment text. Plain text; stored and displayed as written."},{"name":"id","type":"string","required":true,"description":"The action item to comment on."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":203},{"name":"run_diagnostic","title":"Re-run a Diagnostic","description":"Requests a new Diagnostic of the same website and business as an earlier one (prior_diagnostic_id), reusing that run's answers. Available only on a connection an account admin set up in the Yellowhead app and allowed to make this request; a connection made through an assistant's sign-in cannot make it, on any plan. The website, business and account cannot be changed here. The person's own 1-to-10 pillar ratings (side_a_scores) and the spend figures can optionally be updated: anything not sent keeps the earlier run's value, and the approver sees each change beside the earlier value. A run is always held for an account admin to approve in the Yellowhead app, whatever the connection's settings; the result is {status: 'pending_approval', approval_id}. It uses one of the account's included monthly Diagnostics while any remain (get_usage shows how many). Once those are used, a plan that offers additional Diagnostics pays the published per-run rate from the account's prepaid balance, and any other plan is refused. Which of the two applies is decided when the run is requested and checked again at approval; if it changed in between, the run is refused rather than charged differently. After approval a run takes 5 to 10 minutes: get_approval_status gives the new Diagnostic's id and get_diagnostic its progress. Only accounts enabled for runs requested from an assistant can use this tool.","inputs":[{"name":"advertising_budget","type":"integer","required":false,"description":"Optional. Total monthly media spend, whole US dollars."},{"name":"advertising_budget_digital","type":"integer","required":false,"description":"Optional. Monthly DIGITAL ad spend, whole US dollars."},{"name":"advertising_platform_fees","type":"integer","required":false,"description":"Optional. Monthly ad platform / management fees, whole US dollars."},{"name":"budget","type":"integer","required":false,"description":"Optional. Stated monthly marketing tools/software spend, whole US dollars. Without an override the prior run's stated figure is replayed, or 0 if it never stated one."},{"name":"digital_share_pct","type":"integer","required":false,"description":"Optional. Digital share of total media spend: 100 = all digital, 1–99 = partial. This SCALES UP rather than parting out: advertising_budget_digital must carry the DIGITAL amount, never the total, bec…"},{"name":"prior_diagnostic_id","type":"string","required":true,"description":"The diagnostic whose intake this run replays. Must belong to your organization."},{"name":"side_a_scores","type":"object","required":false,"description":"Optional. Per-pillar self-assessment overrides, merged over the prior run's scores — omitted pillars keep their prior value. Whole numbers 1–10; unknown pillar names are refused, not ignored. (`web_s…"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":573},{"name":"describe_yellowhead","title":"About Yellowhead and the free Diagnostic","description":"Describes Yellowhead Digital, with no sign-in needed: what it is; the free Diagnostic (the ten pillars it checks, how long it takes, what the Free plan includes, and that an account is needed to run one); every plan with its price and monthly Diagnostics; the paid scans and human services with their prices and public pages; and a link that opens the Diagnostic form with a website and business name filled in. Fits questions about what Yellowhead does or costs, whether it checks something, or how to get started, including before any account exists. The optional url and business_name only fill in that link: nothing is scanned, stored or looked up.","inputs":[{"name":"business_name","type":"string","required":false,"description":"Optional. The business name to prefill in the start link, as the person gave it."},{"name":"url","type":"string","required":false,"description":"Optional. The website to prefill in the start link, as the person gave it."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":194},{"name":"list_portfolio","title":"List the Portfolio","description":"Lists the client workspaces of the connected team account (brand workspaces on Business Enterprise), one page at a time, with the total so an answer can say how many are shown out of how many. Each row has the client_id, client name and website, the latest Diagnostic (report_id and date; it may still be running or may have failed) and the days since it, the MIDAS score with its tier, its change from the previous scored Diagnostic and whether that change is larger than the usual run-to-run variation, open_action_items (the Portfolio page's own count: items not done and not dismissed, so suggested, queued and in progress), open_high_priority_items (the open items that are critical or high), and the next scheduled Diagnostic. Both item counts cover only work the account owes: items from Diagnostics classified as a competitor, research or a prospect are not counted (list_action_items still lists them). Sorts: name, largest_decline, largest_improvement, lowest_midas, most_open_high_priority, most_open_items, longest_since_last_diagnostic, most_recent_diagnostic and next_scheduled; in the score and date sorts, a client with no Diagnostic or no score comes last. Filters: search (name or website), status, MIDAS tier, client_id, pillar (counts only that pillar's critical and high items) and min_open_high_priority_items. An empty page means no workspace matched these filters, not that the account has none. Included with team accounts on the Agency plans, Business Enterprise and custom plans. Fits \"which clients need attention\", ranking clients, and finding a client's client_id by name for list_action_items or list_diagnostics.","inputs":[{"name":"client_id","type":"string","required":false,"description":"One client workspace's row."},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (next_cursor) from a previous response."},{"name":"limit","type":"integer","required":false,"description":"Page size (default 10, max 25)."},{"name":"min_open_high_priority_items","type":"integer","required":false,"description":"Only workspaces with at least this many open items of critical or high priority, counting only work the account owes."},{"name":"pillar","type":"string","required":false,"description":"A pillar (compliance is shown to people as Trust & Security). The critical and high item count, and min_open_high_priority_items, then cover that pillar only."},{"name":"search","type":"string","required":false,"description":"Part of a client name or website, matched without regard to case."},{"name":"sort","type":"string","required":false,"description":"Row order (default name)."},{"name":"status","type":"string","required":false,"description":"Active workspaces (default), archived ones, or all."},{"name":"tier","type":"string","required":false,"description":"Only workspaces whose latest MIDAS score is in this tier, or that have no score yet."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":547},{"name":"get_portfolio_changes","title":"Get Portfolio changes","description":"Lists the client workspaces whose MIDAS score moved since a date (default: the last 30 days), largest move first. A client appears when its most recent scored Diagnostic is on or after that date and its MIDAS changed, against the scored Diagnostic before it, by more than the usual run-to-run variation; smaller moves are left out, because scores for an unchanged site can move a little between runs. Each item has the client_id and client name, the previous and current MIDAS and the change, both report_ids with their dates for citing (report_id, previous_report_id and previous_report_date are null when that pair cannot be confirmed in this account), and the open items of critical or high priority (only work the account owes: items from Diagnostics classified as a competitor, research or a prospect are not counted). direction narrows the list to declines or improvements; client_id narrows it to one client. An empty list means no client moved by more than that in the window, not that nothing changed. truncated is true when more clients moved by more than that in the window than one call examines (the most recent are examined), so the list may be incomplete. Archived workspaces are not included. Included with team accounts on the Agency plans, Business Enterprise and custom plans. Fits \"which of my clients got worse this month\" and \"who improved since our last review\".","inputs":[{"name":"client_id","type":"string","required":false,"description":"One client workspace only."},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (next_cursor) from a previous response."},{"name":"direction","type":"string","required":false,"description":"declined, improved, or any (default)."},{"name":"limit","type":"integer","required":false,"description":"Page size (default 10, max 25)."},{"name":"since","type":"string","required":false,"description":"Start of the window: a date (YYYY-MM-DD, read as midnight UTC) or an RFC 3339 date-time. Default: 30 days ago."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":391},{"name":"start_diagnostic","title":"Start a free Diagnostic","description":"Starts a Diagnostic of a website for the signed-in person, in two calls. The first call returns a preview and starts nothing: the website, the business name, the ten 1-to-10 self-ratings (which were answered, carried over or entered as 5 for \"not sure\"), the monthly tools budget, where the run is filed, which of the account's included monthly Diagnostics it uses, and a confirmation_token. A second call with that token starts it; any change needs a new preview. It uses only the account's included Diagnostics: when none are left the result is quota_exhausted with the reset date and the plans page, and nothing is charged. A run takes 5 to 10 minutes and a completion email also arrives; get_run_status reports progress. earlier_report_id fills in the website, name, ratings and budget from an earlier report, for a re-check; if that run did not complete and the same person started it, starting it again once for the same website and name does not use another Diagnostic (the preview says whether it applies). On an account with workspaces (clients, prospects or brands), client_id or file_as says where the run is filed, and needs_client lists the candidates when that is not clear. For an owner or admin of an Agency-plan team account, file_as prospect on a website not yet in Prospects creates a new prospect workspace for it (named by prospect_name, else the business name); the preview says so and nothing is created before the confirmation. The same person may ask for a new client workspace for a website no workspace holds: file_as client with client_name (the new workspace's name); without client_name a miss lists the client workspaces instead. Available on connections made through an AI assistant's sign-in.","inputs":[{"name":"budget","type":"integer|null","required":false,"description":"Roughly what the business spends a month on marketing tools and software, in whole US dollars. Null when unknown: it is then entered as 0, the intake form's own default. Left out, it is also entered…"},{"name":"business_name","type":"string","required":false,"description":"The name of the business that operates the website, as the person gave it. Optional with earlier_report_id."},{"name":"client_id","type":"string","required":false,"description":"The client, prospect or brand workspace to file the run in. It must be a workspace of this account."},{"name":"client_name","type":"string","required":false,"description":"Asks for a new client workspace with this name, for a website no workspace of the account holds. Sent only with file_as client and without client_id, and only when the person asked for a new client w…"},{"name":"confirmation_token","type":"string","required":false,"description":"The token from this tool's preview. Present only on the second call, which starts the run."},{"name":"earlier_report_id","type":"string","required":false,"description":"An earlier Diagnostic of this account whose website, business name, ratings and budget fill in anything not sent."},{"name":"file_as","type":"string","required":false,"description":"What the person asked for when no client_id is sent: prospect (filed in Prospects; for an owner or admin of an Agency-plan team account, a website not yet in Prospects gets a new prospect workspace),…"},{"name":"prospect_name","type":"string","required":false,"description":"The name of a new prospect workspace, sent only with file_as prospect and without client_id. Left out, the business name is used. Invisible and control characters are removed; it needs a letter or di…"},{"name":"side_a_scores","type":"object","required":false,"description":"The person's own 1-to-10 rating of each pillar, keyed attribution, tech_stack, conversion, compliance (shown to people as Trust & Security), brand, marketing, advertising, competitors, product and di…"},{"name":"url","type":"string","required":false,"description":"The website to check, as the person gave it (a domain or an http/https address). Tracking parameters are removed, and the address that remains must be at most 2048 characters. Optional with earlier_r…"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":943},{"name":"get_run_status","title":"Get a Diagnostic run's status","description":"Reports whether a Diagnostic is queued, running, completed or failed, by its id (diagnostic_id, as start_diagnostic and list_diagnostics give it), with when it started and how many minutes have passed. A Diagnostic usually takes 5 to 10 minutes; one taking longer is reported as running with slow set, because it may still finish, and as failed only once it has recorded a failure or 30 minutes have passed. A failed result says whether starting it again from this connection uses another of the month's Diagnostics. Fits \"is it ready yet?\" at any point in the conversation.","inputs":[{"name":"diagnostic_id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":137}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-07T02:29:16.000Z","track":"remote","endpoint":"https://api.yellowhead.digital/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=api.yellowhead.digital","issuer":"CN=YE2,O=Let's Encrypt,C=US","notBefore":"2026-10-12T16:49:50Z","notAfter":"2027-01-10T16:49:49Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=YE2,O=Let's Encrypt,C=US","issuer":"CN=Root YE,O=ISRG,C=US","notBefore":"2025-09-03T00:00:00Z","notAfter":"2028-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true},{"subject":"CN=Root YE,O=ISRG,C=US","issuer":"CN=ISRG Root X2,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true},{"subject":"CN=ISRG Root X2,O=Internet Security Research Group,C=US","issuer":"CN=ISRG Root X1,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"secure","label":"Secure","name":"api.yellowhead.digital.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"digital.","outcome":"verified","label":"Verified"},{"zone":"yellowhead.digital.","outcome":"verified","label":"Verified"},{"zone":"api.yellowhead.digital.","outcome":"verified","label":"Verified"}]},"auth":{"outcome":"enforced_validated","label":"Enforced and verified","gate":"invoke","gateLabel":"On tool calls","status":200,"authorizationServers":["https://api.yellowhead.digital"]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":301},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-11-06","recent":[{"id":"chg_01a1b3d6-b8d1-72a3-914f-f71dc5d78028","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d1-72a3-914f-f71dc5d78028"},{"id":"chg_01a1b3d6-b8d1-7ae6-850a-1e924f899964","kind":"tool.description_changed","summary":"Tool “get_action_item” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d1-7ae6-850a-1e924f899964"},{"id":"chg_01a1b3d6-b8d2-78f4-b77e-4a64251f1dd8","kind":"tool.description_changed","summary":"Tool “get_report” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d2-78f4-b77e-4a64251f1dd8"},{"id":"chg_01a1b3d6-b8d2-7eea-aaf8-59097713c10e","kind":"tool.description_changed","summary":"Tool “list_action_items” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d2-7eea-aaf8-59097713c10e"},{"id":"chg_01a1b3d6-b8d3-75da-a941-e29b81b76861","kind":"tool.description_changed","summary":"Tool “list_portfolio” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d3-75da-a941-e29b81b76861"},{"id":"chg_01a1b3d6-b8d3-7bfb-9a16-9d00aa012c44","kind":"param.description_changed","summary":"“list_portfolio” reworded the description of “pillar”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d3-7bfb-9a16-9d00aa012c44"},{"id":"chg_01a1b3d6-b8d4-7178-9d07-28ab1895a65b","kind":"tool.description_changed","summary":"Tool “run_diagnostic” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d4-7178-9d07-28ab1895a65b"},{"id":"chg_01a1b3d6-b8d5-7c66-a00d-101e7ee4df69","kind":"param.description_changed","summary":"“start_diagnostic” reworded the description of “side_a_scores”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d5-7c66-a00d-101e7ee4df69"},{"id":"chg_01a1b3d6-b8d6-7a0c-8591-67b7bbbb8031","kind":"score.total_changed","summary":"Trust score (77 → 78)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-07","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b3d6-b8d6-7a0c-8591-67b7bbbb8031"},{"id":"chg_01a1b2aa-d3ef-75fc-b42b-ff2d8fd436c1","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-06","url":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api#chg-chg_01a1b2aa-d3ef-75fc-b42b-ff2d8fd436c1"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api/changelog.json"},"links":{"html":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api","markdown":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api.md","changelogJson":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api/changelog.json","changelogRss":"https://verifymcp.io/servers/digital-yellowhead-agent-door/api.xml","external":[{"label":"Remote endpoint","href":"https://api.yellowhead.digital/mcp"},{"label":"Website","href":"https://yellowhead.digital/docs/agent-door"}]}}