{
  "schemaVersion": 1,
  "skillId": "anthropic-mcp-builder",
  "reviewedOn": "2026-10-19",
  "revision": "dbd4588f9e1033efb41dad4bef2f7947c8993d44",
  "status": "completed-bounded-helper-probes",
  "mode": "account-free-helper-probes",
  "scope": "Parser and diagnostic helpers executed unchanged; evaluation-loop control flow exercised with synthetic provider/transport objects. Documentation and connection paths inspected.",
  "runtime": {
    "status": "bounded-helper-only",
    "actualHelperChecks": 3,
    "mockedProviderTransportChecks": 3,
    "realProviderCalls": 0,
    "realMcpCalls": 0,
    "generatedServerExecutions": 0
  },
  "countMeaning": "Counts are bounded expectations; failures are retained. They are not a safety, quality or model-effectiveness score.",
  "environment": {
    "python": "3.12.10",
    "os": "Windows-11-10.0.26200-SP0",
    "packages": {
      "providerSdk": "not imported; sentinel module",
      "transportSdk": "not imported; sentinel module"
    }
  },
  "commands": [
    "python -B helper_probe.py --sources <retrieved-skills-directory> --runtime-libs <existing-bundled-site-packages>"
  ],
  "controls": [
    "Fresh child environment omits account/credential variables and points home/temp at disposable directories",
    "Known source hashes verified before import; upstream source bytes unchanged",
    "Python audit hooks block connect/bind/DNS and child-process effects and restrict filesystem mutations to synthetic fixtures",
    "30-second per-suite deadline; no global package installs or remote requests"
  ],
  "isolationLimits": [
    "Application-level guards on inspected Python code, not an OS sandbox or containment guarantee",
    "No VM/container, resource quotas, arbitrary hostile code tests or real credential handling"
  ],
  "findings": [
    {
      "severity": "attention",
      "title": "Multiple tool requests are only partly handled",
      "detail": "In the fake-provider probe, a response requested two tool calls but the evaluation loop executed and answered only the first. This is a control-flow result with synthetic objects, not a live API response test; adapt and test the runner before relying on parallel tool use."
    },
    {
      "severity": "attention",
      "title": "Diagnostic text can disclose supplied values",
      "detail": "A malformed credential-like header echoed its synthetic marker to stdout. A fake tool exception forwarded its marker and traceback into the next model-bound result. No real secret or provider request was used; keep sensitive values out of evaluation fixtures and sanitize logs and tool errors before connecting a real model."
    },
    {
      "severity": "attention",
      "title": "The included model evaluation is not account-free",
      "detail": "The source runner constructs an Anthropic API client and sends questions and tool outputs to it. This pass replaced provider and transport interfaces with in-memory fixtures. A real evaluation needs provider access, approved data handling and explicit cost and tool-permission limits."
    }
  ],
  "limitations": [
    "Three parser/logging checks and three control-flow checks with a fake provider, fake transport and synchronous coroutine dispatch. No real model, SDK transport, server or API was exercised.",
    "No generated-server quality, OAuth behavior, multitenant isolation, prompt-injection resistance, concurrency, cost control or effectiveness improvement was established.",
    "One bounded pass at one pinned revision; no model-effectiveness baseline, repeated trials, security certification or assurance about future versions.",
    "No private files, credentials, authenticated accounts, paid requests or real customer workflows. Transitive dependencies and current vulnerability advisories were not audited."
  ],
  "cases": [
    {
      "id": "mcp-xml-nominal",
      "mode": "actual-helper",
      "expectation": "Parse and trim one synthetic question and answer pair",
      "passed": true,
      "observed": {
        "pairs": [
          {
            "question": "What is 2 + 2?",
            "answer": "4"
          }
        ]
      }
    },
    {
      "id": "mcp-xml-malformed",
      "mode": "actual-helper",
      "expectation": "Return no tasks and a diagnostic for malformed XML",
      "passed": true,
      "observed": {
        "taskCount": 0,
        "parseErrorReported": true
      }
    },
    {
      "id": "mcp-malformed-header-redaction",
      "mode": "actual-helper",
      "expectation": "Avoid copying a malformed credential-like header into logs",
      "passed": false,
      "observed": {
        "headerCount": 0,
        "syntheticMarkerEchoed": true
      }
    },
    {
      "id": "mcp-single-tool-loop",
      "mode": "mocked-provider-and-transport",
      "expectation": "Run one fake tool call and recover the final answer",
      "passed": true,
      "observed": {
        "toolCalls": 1,
        "providerCalls": 2,
        "finalAnswer": "<response>4</response>",
        "realProviderCalls": 0,
        "realMcpCalls": 0
      }
    },
    {
      "id": "mcp-multiple-tool-loop",
      "mode": "mocked-provider-and-transport",
      "expectation": "Answer every tool-use block in a two-tool model response",
      "passed": false,
      "observed": {
        "requestedToolCalls": 2,
        "executedFakeToolCalls": 1,
        "toolResultBlocks": 1
      }
    },
    {
      "id": "mcp-exception-redaction",
      "mode": "mocked-provider-and-transport",
      "expectation": "Keep internal exception details and stack traces out of model-bound tool results",
      "passed": false,
      "observed": {
        "syntheticInternalMarkerForwarded": true,
        "tracebackForwarded": true,
        "realProviderCalls": 0
      }
    }
  ],
  "results": {
    "passed": 3,
    "failed": 3,
    "total": 6
  },
  "sourceManifest": [
    {
      "path": "skills/mcp-builder/SKILL.md",
      "sha256": "0f4592dcb53cf2b5d6b7febee6b4152018b565551a1c29e3c612f57b218ab295",
      "gitBlob": "8a1a77a47d141967b246adb4da4f91037578ff7d",
      "sourceUrl": "https://github.com/anthropics/skills/blob/dbd4588f9e1033efb41dad4bef2f7947c8993d44/skills/mcp-builder/SKILL.md"
    },
    {
      "path": "skills/mcp-builder/LICENSE.txt",
      "sha256": "bc6b3af2f331cbc7fb0da1344efb2cbe5877a31498b4d70dbc7000f3405a1362",
      "gitBlob": "4f881c52d1f72f4cfb720e339e2d35c3058d01a9",
      "sourceUrl": "https://github.com/anthropics/skills/blob/dbd4588f9e1033efb41dad4bef2f7947c8993d44/skills/mcp-builder/LICENSE.txt"
    },
    {
      "path": "skills/mcp-builder/scripts/connections.py",
      "sha256": "9403668a2041568772082a8b334122c1f88daf0541fb393af4522d0094a47a6e",
      "gitBlob": "ffcd0da3fbe1539320d022017ae83b61a9587a5c",
      "sourceUrl": "https://github.com/anthropics/skills/blob/dbd4588f9e1033efb41dad4bef2f7947c8993d44/skills/mcp-builder/scripts/connections.py"
    },
    {
      "path": "skills/mcp-builder/scripts/evaluation.py",
      "sha256": "49ed1d17cdce5da101b210197740713f49b935c29d4f339542a14b132658e6f7",
      "gitBlob": "41778569c45a458e0eea839b8917692ad65be2d5",
      "sourceUrl": "https://github.com/anthropics/skills/blob/dbd4588f9e1033efb41dad4bef2f7947c8993d44/skills/mcp-builder/scripts/evaluation.py"
    },
    {
      "path": "skills/mcp-builder/scripts/requirements.txt",
      "sha256": "d5d7558b2368ecea9dfeed7d1fbc71ee9e0750bebd1282faa527d528a344c3c7",
      "gitBlob": "e73e5d1e356edafadb9dc9243e6f300f2c5529b3",
      "sourceUrl": "https://github.com/anthropics/skills/blob/dbd4588f9e1033efb41dad4bef2f7947c8993d44/skills/mcp-builder/scripts/requirements.txt"
    },
    {
      "path": "skills/mcp-builder/reference/mcp_best_practices.md",
      "sha256": "80fb4369a349447cf18ecdd7494fe7938b6065377e9f08c077cec411093a3007",
      "gitBlob": "b9d343cc3ae89b1fc139dae96bdb2b7e29ba3648",
      "sourceUrl": "https://github.com/anthropics/skills/blob/dbd4588f9e1033efb41dad4bef2f7947c8993d44/skills/mcp-builder/reference/mcp_best_practices.md"
    }
  ],
  "baseline": {
    "status": "not-run",
    "reason": "No model-effectiveness comparison or workflow-quality claim"
  },
  "repetitions": 1,
  "harnessArtifact": "/skill-evaluations/expansion-helper-harness.json",
  "setupNotes": [
    "The first orchestration attempt was stopped by the no-sockets guard because Windows asyncio creates a wakeup socket. The final probe replaced to_thread dispatch with an immediately completing in-memory coroutine driver; the guard was not relaxed. No thread scheduling, cancellation or real asynchronous I/O was tested."
  ]
}
