{
  "automatic_evidence_credit": false,
  "captures": [],
  "change_log": [
    {
      "after_hash": "9f9f6617b944492df4565512d79dc232f98e2abb8b5695cf00d50c117f835478",
      "before_hash": "9f9f6617b944492df4565512d79dc232f98e2abb8b5695cf00d50c117f835478",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "Declared provider, version, model, operator or AI self-disclosure changed",
            "kind": "DECLARED_INGREDIENTS_CHANGED",
            "path": "$.declared_ingredients_changed",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": null,
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "d50601ded2232f7c746b8f9b1da4ef7cf8dfc516055c563f07f2e7fcc12e3c89",
      "evidence_class": "FACT_CHANGE",
      "labels": [
        "DECLARED_INGREDIENTS_CHANGED"
      ],
      "observed_at_utc": "2026-10-19T01:19:35Z",
      "previous_entry_sha256": "5a980c4a778463a014c5436e9b02e97b7f239be45f000b3c42897ee85e9c4922",
      "receipt_id": null,
      "receipt_url": null,
      "sequence": 36901,
      "target_id": "obs_fd5ba029d339c8846f5246b9",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.tresbien.tech/mcp"
    },
    {
      "after_hash": "9f9f6617b944492df4565512d79dc232f98e2abb8b5695cf00d50c117f835478",
      "before_hash": "686e88204d190be0d86f906ee95ba32497a6339a18f3a6a0970184d48b2540c8",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[wordpal_theme]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[query_dataset].description",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 1
        },
        "taxonomy_version": "1.0.0",
        "total": 2,
        "truncated": false
      },
      "entry_sha256": "5a980c4a778463a014c5436e9b02e97b7f239be45f000b3c42897ee85e9c4922",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-10-19T01:19:35Z",
      "previous_entry_sha256": "f091cf8f05b075317617b9d37be19a8ba362c0862f25f48231d8f05c2078c878",
      "receipt_id": "11d4e845-5086-5f0b-be97-3512d4c05002",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/11d4e845-5086-5f0b-be97-3512d4c05002",
      "sequence": 36900,
      "target_id": "obs_fd5ba029d339c8846f5246b9",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.tresbien.tech/mcp"
    },
    {
      "after_hash": "686e88204d190be0d86f906ee95ba32497a6339a18f3a6a0970184d48b2540c8",
      "before_hash": "32135d35830c0c85d36f969afb5190a7b7be4f498eff797f88643caedcade389",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[search_code].description",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": "1.0.0",
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "5d85b6637e39dfae8433403a18fbc4199deb4229b077b8e3616359e31cbcd7a9",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-10-11T14:25:58Z",
      "previous_entry_sha256": "eb108f70ae402fd50fe85e20e45df007d80cd240874a556f049ef84353938969",
      "receipt_id": "b37b7158-0284-561a-a5e3-911296fa3307",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/b37b7158-0284-561a-a5e3-911296fa3307",
      "sequence": 24836,
      "target_id": "obs_fd5ba029d339c8846f5246b9",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.tresbien.tech/mcp"
    }
  ],
  "check_outcomes": {
    "ask": {
      "changed_since": "https://www.gaipagents.com/v1/free/observatory/changed-since?url=<endpoint>",
      "changes_and_reachability": "https://www.gaipagents.com/v1/free/changes/subscribe?url=<endpoint>",
      "conformance": "https://www.gaipagents.com/v1/free/conformance/check?url=<endpoint>"
    },
    "published": false,
    "why": "Outcomes of GAIP's own checks (whether the endpoint answered, HTTP status, response time, conformance findings) are given only to a caller who asks about the URL, never on a public page, list or feed. The same applies to every target."
  },
  "conformance": {
    "findings": "GIVEN_TO_CALLER_ONLY",
    "meaning": "The rule catalogue this manifest was read against at the observed time. The finding codes go only to a caller who checks the URL (check_outcomes.ask.conformance).",
    "observed_at_utc": "2026-10-19T01:19:35Z",
    "protocol": "MCP",
    "rule_catalogue_route": "/v1/free/knowledge/conformance-rules",
    "rule_catalogue_version": "1.0.0"
  },
  "corrections": {
    "contact": "https://www.gaipagents.com/contact",
    "exclusion": "https://www.gaipagents.com/v1/free/observatory/corrections/exclusion",
    "opt_out": "POST kind OPT_OUT to the route; the target is withdrawn from public view at once (a pause). The site's owner makes it permanent at https://www.gaipagents.com/v1/free/observatory/corrections/exclusion.",
    "queued_for_review": 0,
    "route": "https://www.gaipagents.com/v1/free/observatory/corrections"
  },
  "declared_derivations": {
    "data_appetite": {
      "categories": {
        "file_upload": {
          "fields": 2,
          "tools": 2
        },
        "free_text_large": {
          "fields": 2,
          "tools": 2
        }
      },
      "fields_read": 127,
      "observed_at_utc": "2026-10-19T01:19:35Z",
      "tools_read": 17
    },
    "dependency_domains": [],
    "last_observed_at_utc": "2026-10-19T01:19:35Z",
    "meaning": "Derived by GAIP from what this agent declared, at the stated time: the categories of data its tools' input fields ask for (counts, by keyword rules gaip.data-appetite-rules.v1), the outside domains its declarations point to, and the operator as the agent itself publishes it. Facts about declarations, not an assessment of the agent or its operator.",
    "operator": {
      "as_published": "tech.tresbien",
      "source_kind": "registry_namespace_domain"
    },
    "rules_version": "gaip.data-appetite-rules.v1",
    "schema_version": "gaip.declared-derivations.v1"
  },
  "latest": {
    "baseline_at_utc": "2026-10-04T18:28:06Z",
    "manifest_sha256": "9f9f6617b944492df4565512d79dc232f98e2abb8b5695cf00d50c117f835478",
    "observed_at_utc": "2026-10-19T01:19:35Z"
  },
  "metadata_signals": {
    "meaning": "Pattern rules are published only as aggregate rates across all observed targets (see the summary), never per party. GAIP issues no overall verdict and does not rank parties.",
    "overall_verdict": null,
    "per_target_results": null,
    "published": "AGGREGATE_ONLY_IN_SUMMARY",
    "rules": [
      {
        "rationale": "Zero-width, bidirectional-control and Unicode tag characters are not visible to a human reader but are read by language models. GAIP reports whether any occur; many have ordinary uses.",
        "rule_id": "OBS-SIG-001",
        "title": "Invisible or bidirectional-control Unicode characters in names or descriptions"
      },
      {
        "rationale": "Tool and skill descriptions are read by models. GAIP reports whether a description contains phrases shaped like instructions to a model (the patterns in GAIP's public conformance rule catalogue, plus the phrases listed in the Observatory method). Such phrases can be benign.",
        "rule_id": "OBS-SIG-002",
        "title": "Instruction-like text in descriptions"
      },
      {
        "rationale": "When a description refers to a tool name that only a different observed server publishes, a model using both servers may connect the two. GAIP reports whether such a reference occurs; shared names are common and often coincidental.",
        "rule_id": "OBS-SIG-003",
        "title": "Description names a tool published by a different observed server"
      },
      {
        "rationale": "Declared OAuth scopes whose names contain wildcard or whole-account wording (*, all, admin, root, full) request wide access by name. GAIP reports whether such a scope name is declared; it does not know what the scope grants.",
        "rule_id": "OBS-SIG-004",
        "title": "Declared authorization scopes with broad-access wording"
      }
    ],
    "third_party_scanners": [
      {
        "name": "Snyk agent-scan (formerly Invariant Labs mcp-scan)",
        "status": "NOT_RUN",
        "url": "https://github.com/snyk/agent-scan"
      },
      {
        "name": "Cisco AI Defense MCP Scanner",
        "status": "NOT_RUN",
        "url": "https://github.com/cisco-ai-defense/mcp-scanner"
      }
    ]
  },
  "method": "https://www.gaipagents.com/observatory",
  "notice": "Facts observed by GAIP at the stated time (UTC); they may be out of date. This is not an assessment of safety, quality, security, legality or trustworthiness of any party, and not a recommendation. To request a correction, add a right of reply or opt out, POST to https://www.gaipagents.com/v1/free/observatory/corrections or use https://www.gaipagents.com/contact.",
  "price_gbp": 0,
  "schema_version": "gaip.observatory.v1.target",
  "silent_changes_last_30_days": {
    "days": 30,
    "entries_read_at_most": 200,
    "kinds": [
      "tool_descriptions_reworded"
    ],
    "line": "In the last 30 days its declared tools or interface changed with no declared version change in 1 week: 2026-W41 (2026-10-11); kinds: tool descriptions re-worded.",
    "meaning": "Weeks (ISO) in which GAIP recorded a change to the agent's declared tools or interface (tools added or removed, descriptions re-worded, input or output schema, behaviour labels, sign-in, terms or prices, endpoint host) and no declared version (registry or card version, serverInfo.version) moved that week. A week whose version movement is not recorded is not counted. Dated facts from the public change log; not an assessment of the agent.",
    "weeks": [
      {
        "dates": [
          "2026-10-11"
        ],
        "kinds": [
          "tool_descriptions_reworded"
        ],
        "week": "2026-W41"
      }
    ],
    "weeks_with_silent_changes": 1
  },
  "snapshot": {
    "capabilities": [
      "tools"
    ],
    "description": "Drupal core API changes, contrib usage, upgrade readiness, patch verdicts, code search, SQL.",
    "name": "tech.tresbien/drupal-code-query",
    "parts": [
      "registry_server_json",
      "mcp_initialize_tools_list"
    ],
    "protocol": "MCP",
    "protocolVersion": "2025-11-25",
    "public_copy": "Text excerpts of at most 300 characters; input schemas and security schemes as SHA-256 and size only.",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://mcp.tresbien.tech/mcp"
      }
    ],
    "scopes": [],
    "serverInfo": {
      "name": "drupal-code-query",
      "version": "0.48.0"
    },
    "title": "Drupal Code Query",
    "tools": [
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Check composer patches against a release"
        },
        "description": "Does each composer patch still apply to the release the site installed, and is its fix already in that release?\n- Send composer_json and composer_lock after composer update. Add patch_files for every patch, a local one read from disk and a URL one fetched by you. Every extra.patches entry is checked",
        "inputSchema": {
          "bytes": 3369,
          "published": "HASH_ONLY",
          "sha256": "a506e633ca30c4dee46613cfa1717a5aa0b8a5caa8836e3ceae9a1cd1e4c76ad"
        },
        "name": "check_patches",
        "title": "Check composer patches against a release"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Describe the dataset"
        },
        "description": "Learn the dataset before writing SQL for query_dataset. Call it with no arguments first. Returns text. Prefer a typed tool when one answers the question.\n- No arguments: one line per view, the join map, the four invariants, the causes of empty results, and the recipe index. The invariants: dev-branc",
        "inputSchema": {
          "bytes": 545,
          "published": "HASH_ONLY",
          "sha256": "acfcd00f04315664f93f9559e2feffb94aeb7ad66f93b24cf1e7fa1c68d8647c"
        },
        "name": "describe_dataset",
        "title": "Describe the dataset"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "One change record"
        },
        "description": "Return one core change record in full: title, flavour, target version, machine-checkable tracks, linked issues, linked core symbols, and contrib adoption counts. To find records, use list_change_records or the change_record_nids from what_changed. For one symbol's detail, use lookup_core_symbol.\n- f",
        "inputSchema": {
          "bytes": 319,
          "published": "HASH_ONLY",
          "sha256": "456a02a4167d0671781402d4b9820c1e17bb3e68ffc148e0ad2d9f32da4676d8"
        },
        "name": "get_change_record",
        "title": "One change record"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Change records in a version range"
        },
        "description": "List the core change records (the human write-ups) that target a range of core versions, tagged by flavour and ranked, with counts. For the symbol-level diff, use what_changed. For one record in full, use get_change_record.\n- Bounds are inclusive. Forms: 11.2, 11.2.x, 11.2.0, 11, 11.x. A bare major ",
        "inputSchema": {
          "bytes": 623,
          "published": "HASH_ONLY",
          "sha256": "8d8346cf4a1161b83a3a9fe958ac0e4b878d82ef609c34e6d3a53f4b3317302e"
        },
        "name": "list_change_records",
        "title": "Change records in a version range"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Contrib classes extending a core class"
        },
        "description": "List the contrib classes that extend, implement or use a core class, interface or trait, one row per edge with file and line, paged. Example: \"who subclasses FormBase\". Call-site counts: list_symbol_users. The symbol's status: lookup_core_symbol.\n- target: with or without the leading backslash. An u",
        "inputSchema": {
          "bytes": 779,
          "published": "HASH_ONLY",
          "sha256": "2061a80ac3c6e20aedec0d0cdfaff40ec20012f8b2a5518ecc53ab69648c2161"
        },
        "name": "list_class_relations",
        "title": "Contrib classes extending a core class"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List projects by filters"
        },
        "description": "List drupal.org projects after filters, largest install base first, paged. Examples: \"top modules without an 11.4 branch\", \"themes over 10k installs without security coverage\". One project: project_profile. Its pending records: project_upgrade_report.\n- Filters combine: type, min_installs, security ",
        "inputSchema": {
          "bytes": 1385,
          "published": "HASH_ONLY",
          "sha256": "e57ab9bd0332498d1a6c00f7d8e3744ba021d1e0c1470dd15d38036013aa7b72"
        },
        "name": "list_projects",
        "title": "List projects by filters"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Projects using core symbols"
        },
        "description": "List every contrib project using one core symbol, or any symbol in a class of symbols, one row per project, paged, with the matched symbols. lookup_core_symbol answers one symbol with a head of 30.\n- Pass fqn, or filters: kind, status (deprecated, scheduled_removal, removed), subsystem, removal_in (",
        "inputSchema": {
          "bytes": 1231,
          "published": "HASH_ONLY",
          "sha256": "cd75946151889e90aece43b28117e342c2d153800d5ecb9aaf2f52d0e2286793"
        },
        "name": "list_symbol_users",
        "title": "Projects using core symbols"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "One core symbol: status and users"
        },
        "description": "Answer \"is this core symbol safe to use, and who still uses it\" for one symbol. A name that resolves to nothing returns the catalog entries containing it instead. Every user in pages: list_symbol_users. Changed between versions: what_changed. Code text: search_code.\n- fqn forms: a namespaced name wi",
        "inputSchema": {
          "bytes": 1030,
          "published": "HASH_ONLY",
          "sha256": "617b27ea2473aac14947895d7748034512742ad0e96a960704ca5ad0a748d203"
        },
        "name": "lookup_core_symbol",
        "title": "One core symbol: status and users"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Project profile"
        },
        "description": "Answer \"what is this contrib project, how big is it, which core versions does it support, what moves with it\" for one drupal.org project. Pending change records: project_upgrade_report. Core symbols it calls: list_symbol_users.\n- project: title, type, status, security, installs. installs_by_version:",
        "inputSchema": {
          "bytes": 1021,
          "published": "HASH_ONLY",
          "sha256": "53526206ff84b3a940dad8b0d195e35a9ded48ba375457c1c78f4e3e0e6600cf"
        },
        "name": "project_profile",
        "title": "Project profile"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Project upgrade readiness"
        },
        "description": "Answer \"is this contrib project ready for a target core version, and what work is left\". For one record's detail, use get_change_record. For a symbol's users, use list_symbol_users.\n- A record applies when it targets the target version or earlier, and a development branch of the project matched one ",
        "inputSchema": {
          "bytes": 617,
          "published": "HASH_ONLY",
          "sha256": "d34b80111f16347e8206635b4ccfe809d0d36eef2b4b7724052839ace2efd85f"
        },
        "name": "project_upgrade_report",
        "title": "Project upgrade readiness"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Run SQL over the dataset"
        },
        "description": "Run read-only DuckDB SELECTs over the dataset behind the other tools, for a question none of them asks. Call describe_dataset first; it lists the 36 views, their columns, joins and recipes. Prefer a typed tool when one fits.\n- statements=[\u2026]: up to 5 statements in one call, one result or error each.",
        "inputSchema": {
          "bytes": 736,
          "published": "HASH_ONLY",
          "sha256": "f09ca298bdab74b9d8badf2d042a2460424dc70176d2d00350a4a7f342b6aeeb"
        },
        "name": "query_dataset",
        "title": "Run SQL over the dataset"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Re-roll one patch against a release"
        },
        "description": "Re-roll one composer patch that check_patches reported conflicts or fuzzy: a new diff that applies to the installed release. Call check_patches first for the whole list. Call this once per patch that came back conflicts or fuzzy.\n- Input: project, version, patch, title, base. patch is the diff text;",
        "inputSchema": {
          "bytes": 2360,
          "published": "HASH_ONLY",
          "sha256": "a5b8eb665afe78629063fb89b502f2d9b235281636c60726f17d3ec572be1661"
        },
        "name": "reroll_patch",
        "title": "Re-roll one patch against a release"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Scan a site's composer files for a core upgrade"
        },
        "description": "Which of a site's drupal/* packages need a new release for a target core, and which have none? Send composer.lock and composer.json once; do not query one package at a time. The answer is the release scan for every package, plus extra.patches as check_patches items. Constraints are read by composer'",
        "inputSchema": {
          "bytes": 2376,
          "published": "HASH_ONLY",
          "sha256": "4852f3e70f37fa5d6a340aa8e27ba1cff80a1b091538a9af11769d00da5ebc9b"
        },
        "name": "scan_composer",
        "title": "Scan a site's composer files for a core upgrade"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Search contrib and core code"
        },
        "description": "Search the source of every indexed contrib project, plus core, for a code pattern: which files, or with by_repo which projects. Who-uses-a-core-symbol counts: list_symbol_users or lookup_core_symbol.\n- query is a regex. Set literal for exact text with ( [ ] . $ : or a space, and put r: f: lang: case",
        "inputSchema": {
          "bytes": 984,
          "published": "HASH_ONLY",
          "sha256": "30fa90d96b76cf832409ad0fd96b0adc48c1d972fba3de6d63f5507374900faf"
        },
        "name": "search_code",
        "title": "Search contrib and core code"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Subsystem co-failure graph"
        },
        "description": "Answer \"what else tends to fail when a merge request touches this core subsystem\" from CI history over about 9,000 core merge requests. With issue_nid: \"which subsystems does this issue touch, and what co-fails with them\". No arguments: the list of subsystems, the same one core_symbol.subsystem and ",
        "inputSchema": {
          "bytes": 760,
          "published": "HASH_ONLY",
          "sha256": "d37e0bb83491801ff58b42c402bc8f0fba0e1b870b872968b69191fcb8fb9eae"
        },
        "name": "subsystem_coupling",
        "title": "Subsystem co-failure graph"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Core API diff between versions"
        },
        "description": "Answer \"what changed in the core API between two core versions\": symbols added, deprecated and removed, as ranked groups with counts. One symbol: lookup_core_symbol. Human write-ups: list_change_records. Every row of one bucket: flat=true with bucket, paged. Every row of the whole diff: the result's",
        "inputSchema": {
          "bytes": 1361,
          "published": "HASH_ONLY",
          "sha256": "798225b3ec06dcc93bd42c064e5a7f45962492a59aa442cf9cad785c2b407e69"
        },
        "name": "what_changed",
        "title": "Core API diff between versions"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "WordPress theme conversion status"
        },
        "description": "Answer \"does this WordPress block theme convert to Drupal with WordPal\". The WordPal gallery converts every block theme on wordpress.org each night. With slug: one theme and its routes. Without slug: counts by status and the most installed themes.\n- version: the theme version wordpress.org lists now",
        "inputSchema": {
          "bytes": 694,
          "published": "HASH_ONLY",
          "sha256": "09f035387cb14acdde4902af1f4d596d823414bc35907fd541c089dbc5be521b"
        },
        "name": "wordpal_theme",
        "title": "WordPress theme conversion status"
      }
    ],
    "version": "0.42.0"
  },
  "status_history": [
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "9f9f6617b944492df4565512d79dc232f98e2abb8b5695cf00d50c117f835478",
      "observed_at_utc": "2026-10-19T01:19:35Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "686e88204d190be0d86f906ee95ba32497a6339a18f3a6a0970184d48b2540c8",
      "observed_at_utc": "2026-10-11T14:25:58Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "32135d35830c0c85d36f969afb5190a7b7be4f498eff797f88643caedcade389",
      "observed_at_utc": "2026-10-04T18:28:06Z",
      "protocol_version": "2025-11-25"
    }
  ],
  "target": {
    "corrections_route": "https://www.gaipagents.com/v1/free/observatory/corrections",
    "first_seen_at_utc": "2026-10-04T09:18:20Z",
    "kind": "MCP_REMOTE",
    "last_observed_at_utc": "2026-10-19T01:19:35Z",
    "locator": "https://mcp.tresbien.tech/mcp",
    "name": "tech.tresbien/drupal-code-query",
    "source": "official-mcp-registry",
    "target_id": "obs_fd5ba029d339c8846f5246b9"
  }
}