Drupal Code Query is a remote MCP server that gives an AI agent 16 tools, among them check_patches, describe_dataset, get_change_record. It answers at https://mcp.tresbien.tech/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 12 September 2026; the last check, on 24 October 2026, succeeded.
Drupal core API changes, contrib usage, upgrade checks, patches, code search, SQL, WordPal themes.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
check_patches | Does each composer patch still apply to the release the site installed, and is its fix already in that release? - Send composer_json and composer_lock after composer update. Add patch_files for every patch, a local one read from disk and a Inputs: items, composer_json, composer_lock, patches_file, patches_lock, patch_files |
describe_dataset | 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. - No arguments: one line per view, the join map, the four invariants, the causes of em Inputs: view, views, recipe |
get_change_record | 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_c Inputs: nid, top_projects |
list_change_records | 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. - Bounds are inc Inputs: from, to, project, limit |
list_class_relations | 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_s Inputs: target, rel_kind, project, per_project, limit, offset |
list_projects | 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_upgr Inputs: type, min_installs, security, core_minor, missing, era |
list_symbol_users | 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. - Pass fqn, or filters: kind, status (depr Inputs: fqn, kind, status, subsystem, removal_in, deprecated_in |
lookup_core_symbol | 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_change Inputs: fqn, top_projects, candidates, kind |
project_profile | 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. - project: t Inputs: project, releases, include, months, dependents, dependents_offset |
project_upgrade_report | 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. - A record applies when it targets the target version or e Inputs: project, target_version, limit |
query_dataset | 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 31 views, their columns, joins and recipes. Prefer a typed tool when one fits. - statements=[… Inputs: sql, statements, max_rows |
reroll_patch | 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. - Input: p Inputs: project, version, patch, title, base, target_core |
scan_composer | 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.patch Inputs: composer_json, composer_lock, patches_file, patches_lock, target_core, patches |
search_code | 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. - query is a regex. Set literal for exac Inputs: query, literal, filters, repos, limit, by_repo |
subsystem_coupling | 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 Inputs: subsystem, issue_nid, min_lift, min_co_fail, limit |
what_changed | 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 w Inputs: from, to, head, kind, min_projects_using, offset |
Every block below points at https://mcp.tresbien.tech/mcp. Pick your client and copy.
claude mcp add --transport http drupal-code-query https://mcp.tresbien.tech/mcp
{
"mcpServers": {
"drupal-code-query": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.tresbien.tech/mcp"]
}
}
}{
"mcpServers": {
"drupal-code-query": {
"url": "https://mcp.tresbien.tech/mcp"
}
}
}{
"servers": {
"drupal-code-query": {
"type": "http",
"url": "https://mcp.tresbien.tech/mcp"
}
}
}{
"context_servers": {
"drupal-code-query": {
"url": "https://mcp.tresbien.tech/mcp"
}
}
}{
"mcpServers": {
"drupal-code-query": {
"serverUrl": "https://mcp.tresbien.tech/mcp"
}
}
}{
"mcpServers": {
"drupal-code-query": {
"url": "https://mcp.tresbien.tech/mcp"
}
}
}name: Drupal Code Query
version: 0.0.1
schema: v1
mcpServers:
- name: Drupal Code Query
type: streamable-http
url: https://mcp.tresbien.tech/mcp{
"mcpServers": {
"drupal-code-query": {
"httpUrl": "https://mcp.tresbien.tech/mcp"
}
}
}{
"mcpServers": {
"drupal-code-query": {
"type": "http",
"url": "https://mcp.tresbien.tech/mcp"
}
}
}{
"mcpServers": {
"drupal-code-query": {
"url": "https://mcp.tresbien.tech/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fmcp.tresbien.tech%2Fmcp&type=streamable_http&id=drupal-code-query&name=Drupal%20Code%20Query
It answered our last check on 24 October 2026 in 122 ms. Over 6 checks since 12 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by tresbien.tech and served from mcp.tresbien.tech, the vendor's own domain: https://mcp.tresbien.tech/mcp.
16, as returned by the server's own tools/list on 23 September 2026: check_patches, describe_dataset, get_change_record, list_change_records, list_class_relations, list_projects, list_symbol_users, lookup_core_symbol, and 8 more.
It answered our last check on 24 October 2026 in 122 ms. Over 6 checks since 12 September 2026 it answered 6.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.tresbien.tech/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: tech.tresbien. Endpoint host: mcp.tresbien.tech. ARD identifier: urn:air:tech.tresbien:mcp:drupal-code-query.
First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.