{
  "manual_version": "0.1.0",
  "tools": [
    {
      "description": "Catch up: everything a person or group did, and where they were named, in a window, newest first per kind (mail grouped by thread). who: a name (fuzzy; close matches return ambiguous [{name, hash}]), email, hash:<8 hex>, team:<slug>, org:<name>, new:<window>, a phrase ('the core team'), or a list. since/until: ISO date, today, 2w/14d/1m, pg19 (a release's development window), all; default 14 days. during: a calendar event uid/url. topic narrows by hybrid search. Kinds: waiting (one person, no topic: what is on their radar, each with its rule (reply_to_you > called_out > to_cc > named, then commitfest and cfbot rules, then code_changed: open patches changing files they wrote much of on master in threads they have not posted in, group code_changes, with files and their share, score, proposer, patch_url; called_out items carry call_out {evidence, excerpt, confidence, url} quoting the message that asked them to take part), group, priority 0-100 and why, and an outlook (a model's estimate: unit commitfest = P(commit) for the CF and release and thread health, when its thread is in an open commitfest; unit thread = p_commit, P(a commit from a patch thread in no commitfest within horizon_days); people to seek out, factors, model_version)), acted (one person, no topic: what they did about what waited on them: answered, sent_patch, committed, with what asked them and when; an item leaves waiting when they act and shows here), mail_from, mail_to_cc, mail_mention, git_author, git_credit, git_mention, wiki_edit, wiki_mention, commitfest, calendar, roster. Names, page hashes and urls only, never addresses. ~4 s budget; late kinds go in timed_out with partial=true. Cite each item's url.",
      "inputs": {
        "properties": {
          "during": {
            "description": "A calendar event uid or url, or pg19: sets the window to its dates.",
            "type": "string"
          },
          "kinds": {
            "description": "Comma-separated subset of waiting (one person, no topic: what is on their radar),acted (one person, no topic: what they did about what waited on them),mail_from,mail_to_cc,mail_mention,git_author,git_credit,git_mention,wiki_edit,wiki_mention,commitfest,calendar,roster (default all).",
            "type": "string"
          },
          "limit": {
            "default": 20,
            "description": "Items per kind.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "since": {
            "default": "14d",
            "description": "ISO-8601 date/datetime (UTC unless zoned), now, today, \"today 08:00\", 2w / 14d / 1m, pg19 (a release cycle), all.",
            "type": "string"
          },
          "topic": {
            "description": "Narrows every kind by hybrid (mail) / full-text (others) search.",
            "type": "string"
          },
          "until": {
            "default": "now",
            "description": "Same forms as since (no all).",
            "type": "string"
          },
          "who": {
            "description": "A name (fuzzy), an email address, `hash:<8 hex>` or 8 hex, `team:<slug|name>`, `org:<name>` (employment on each item's date), `new:<window>` (people first seen then), or a phrase such as \"the core team\", \"AWS PGCT members\", \"people new this month\". Several, separated by `;`.",
            "type": "string"
          }
        },
        "required": [
          "who"
        ],
        "type": "object"
      },
      "name": "activity",
      "outputs": {
        "properties": {
          "ambiguous": {
            "items": {
              "properties": {
                "hash": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "counts": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object"
          },
          "failed": {
            "description": "Kinds whose query failed (logged); partial is true",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "items": {
            "additionalProperties": {
              "items": {
                "properties": {
                  "added_mid_thread": {
                    "description": "`waiting` items with rule `to_cc`: they were put in To/Cc although no earlier message of the thread had them",
                    "type": "boolean"
                  },
                  "call_out": {
                    "description": "`waiting` items with rule `called_out`: what asked the person to take part, in the message the item links to.\n",
                    "properties": {
                      "confidence": {
                        "description": "Precision of this kind of evidence on a hand-labelled sample",
                        "type": "number"
                      },
                      "evidence": {
                        "description": "direct: a greeting or a sentence spoken to them; cc: \"cc'ing Jane\"; question: a question naming them; new_thread_to_cc: a thread started with them in To/Cc",
                        "enum": [
                          "direct",
                          "cc",
                          "question",
                          "new_thread_to_cc"
                        ],
                        "type": "string"
                      },
                      "excerpt": {
                        "description": "The calling phrase, a substring of the message's own text (at most 120 characters, no addresses); for new_thread_to_cc a fixed description",
                        "type": "string"
                      },
                      "url": {
                        "description": "The calling message",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "cf_id": {
                    "description": "code_change items on an entry: the commitfest entry id",
                    "type": "integer"
                  },
                  "commitfest": {
                    "description": "commitfest and code_change items: the commitfest number",
                    "type": "integer"
                  },
                  "date": {
                    "format": "date-time",
                    "type": "string"
                  },
                  "evidence": {
                    "type": "string"
                  },
                  "files": {
                    "description": "code_change: the person's files in the patch (at most 10), largest share first",
                    "items": {
                      "properties": {
                        "last_touched": {
                          "format": "date",
                          "nullable": true,
                          "type": "string"
                        },
                        "path": {
                          "type": "string"
                        },
                        "share": {
                          "description": "Their share of the file's master history: commits they authored or co-authored, by lines changed, halving every 2 years",
                          "type": "number"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "group": {
                    "description": "`waiting` items",
                    "enum": [
                      "your_patches",
                      "asked_of_you",
                      "thread",
                      "code_changes",
                      "mention"
                    ],
                    "type": "string"
                  },
                  "kind": {
                    "description": "`waiting` items: mail, commitfest or code_change",
                    "type": "string"
                  },
                  "list": {
                    "description": "Mailing list (mail items)",
                    "type": "string"
                  },
                  "messages": {
                    "description": "Matching messages in the thread (mail items)",
                    "type": "integer"
                  },
                  "outlook": {
                    "description": "`waiting` items only, when the commit model has an estimate for the item's thread or commitfest entry. A model estimate about the patch, not a judgement of a person. `unit` says which: `commitfest` (cf, release, p_cf, p_release and their bands) or `thread` (a patch thread in no commitfest: p_commit, band_commit, horizon_days).\n",
                    "properties": {
                      "band_cf": {
                        "enum": [
                          "low",
                          "medium",
                          "high"
                        ],
                        "type": "string"
                      },
                      "band_commit": {
                        "description": "unit thread: low < 0.15 <= medium < 0.40 <= high",
                        "enum": [
                          "low",
                          "medium",
                          "high"
                        ],
                        "type": "string"
                      },
                      "band_release": {
                        "enum": [
                          "low",
                          "medium",
                          "high"
                        ],
                        "type": "string"
                      },
                      "cf": {
                        "nullable": true,
                        "properties": {
                          "closes": {
                            "format": "date",
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "number": {
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "computed_at": {
                        "format": "date-time",
                        "type": "string"
                      },
                      "factors": {
                        "items": {
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "value": {},
                            "weight": {
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "health": {
                        "enum": [
                          "healthy",
                          "unhealthy",
                          "unknown"
                        ],
                        "type": "string"
                      },
                      "horizon_days": {
                        "example": 60,
                        "type": "integer"
                      },
                      "model": {
                        "description": "Which model made it, e.g. bayes",
                        "type": "string"
                      },
                      "model_version": {
                        "example": "bayes-2.0",
                        "nullable": true,
                        "type": "string"
                      },
                      "p_cf": {
                        "description": "P(committed in that commitfest by its close)",
                        "type": "number"
                      },
                      "p_commit": {
                        "description": "unit thread: P(a commit refers to the thread within horizon_days)",
                        "type": "number"
                      },
                      "p_release": {
                        "description": "P(committed in that release by its feature freeze)",
                        "type": "number"
                      },
                      "release": {
                        "nullable": true,
                        "properties": {
                          "feature_freeze": {
                            "format": "date",
                            "nullable": true,
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "seek": {
                        "description": "People with history in the touched code not yet active on the thread",
                        "items": {
                          "properties": {
                            "committer": {
                              "type": "boolean"
                            },
                            "hash": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "reason": {
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "unit": {
                        "enum": [
                          "commitfest",
                          "thread"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "patch_files": {
                    "description": "code_change: files of the patch with master history",
                    "type": "integer"
                  },
                  "patch_url": {
                    "description": "code_change: the newest patch message (its list page when the Message-ID holds an address; `note` says so)",
                    "type": "string"
                  },
                  "people": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "priority": {
                    "description": "`waiting` items",
                    "maximum": 100,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "priority_why": {
                    "description": "`waiting` items",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "proposer": {
                    "description": "code_change: who sent the patch; all null when they hid their page, no hash when unknown",
                    "properties": {
                      "hash": {
                        "nullable": true,
                        "type": "string"
                      },
                      "name": {
                        "nullable": true,
                        "type": "string"
                      },
                      "url": {
                        "nullable": true,
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "rank": {
                    "description": "`waiting` mail items: 1 reply_to_you, 2 called_out, 3 to_cc, 4 named",
                    "type": "integer"
                  },
                  "role": {
                    "type": "string"
                  },
                  "rule": {
                    "description": "`waiting` items: the rule that put it there (reply_to_you, called_out, to_cc, named, cf_*, cfbot_*, code_changed)",
                    "type": "string"
                  },
                  "score": {
                    "description": "code_change: their mean share over the patch's files (>= 0.05; on past threads people at that score posted 7.4% of the time, 170x those with no share)",
                    "type": "number"
                  },
                  "title": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "type": "array"
            },
            "type": "object"
          },
          "partial": {
            "type": "boolean"
          },
          "skipped": {
            "description": "Kinds not run, with why (mention kinds for more than 20 people)",
            "items": {
              "properties": {
                "kind": {
                  "type": "string"
                },
                "reason": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "timed_out": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "took_ms": {
            "type": "integer"
          },
          "topic": {
            "nullable": true,
            "type": "string"
          },
          "truncated": {
            "type": "boolean"
          },
          "who": {
            "properties": {
              "count": {
                "type": "integer"
              },
              "description": {
                "type": "string"
              },
              "notices": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "people": {
                "items": {
                  "properties": {
                    "hash": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "truncated": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "window": {
            "properties": {
              "since": {
                "format": "date-time",
                "type": "string"
              },
              "until": {
                "format": "date-time",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/activity"
      }
    },
    {
      "description": "Profile of one buildfarm animal",
      "inputs": {
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "buildfarm_animal_by_name",
      "outputs": {
        "properties": {
          "animal": {
            "properties": {
              "arch": {
                "type": "string"
              },
              "branches_tracked": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "compiler": {
                "type": "string"
              },
              "compiler_version": {
                "type": "string"
              },
              "first_seen_at": {
                "format": "date-time",
                "type": "string"
              },
              "id": {
                "type": "integer"
              },
              "last_status": {
                "enum": [
                  "passed",
                  "failed",
                  "flapping",
                  "unknown",
                  ""
                ],
                "type": "string"
              },
              "last_status_at": {
                "format": "date-time",
                "nullable": true,
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "os": {
                "type": "string"
              },
              "os_version": {
                "type": "string"
              },
              "owner_email": {
                "type": "string"
              },
              "owner_name": {
                "type": "string"
              },
              "seconds_active": {
                "format": "int64",
                "type": "integer"
              }
            },
            "required": [
              "id",
              "name",
              "branches_tracked",
              "first_seen_at"
            ],
            "type": "object"
          },
          "recent_runs": {
            "items": {
              "properties": {
                "animal": {
                  "type": "string"
                },
                "branch": {
                  "type": "string"
                },
                "commit_sha": {
                  "type": "string"
                },
                "completed_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "log_url": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "owner": {
                  "type": "string"
                },
                "stage_failed": {
                  "type": "string"
                },
                "started_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              },
              "required": [
                "branch",
                "status",
                "started_at"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/animal/{name}"
      }
    },
    {
      "description": "Run timeline for one animal",
      "inputs": {
        "properties": {
          "branch": {
            "type": "string"
          },
          "limit": {
            "default": 100,
            "maximum": 1000,
            "minimum": 1,
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "since": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "buildfarm_animal_history",
      "outputs": {
        "properties": {
          "animal": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "runs": {
            "items": {
              "properties": {
                "animal": {
                  "type": "string"
                },
                "branch": {
                  "type": "string"
                },
                "commit_sha": {
                  "type": "string"
                },
                "completed_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "log_url": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "owner": {
                  "type": "string"
                },
                "stage_failed": {
                  "type": "string"
                },
                "started_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              },
              "required": [
                "branch",
                "status",
                "started_at"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/animal/{name}/history"
      }
    },
    {
      "description": "List buildfarm animals",
      "inputs": {
        "properties": {
          "branch": {
            "type": "string"
          },
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "os": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "status": {
            "enum": [
              "passed",
              "failed",
              "flapping",
              "unknown"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "buildfarm_animals",
      "outputs": {
        "properties": {
          "animals": {
            "items": {
              "properties": {
                "arch": {
                  "type": "string"
                },
                "branches_tracked": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "compiler": {
                  "type": "string"
                },
                "compiler_version": {
                  "type": "string"
                },
                "first_seen_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "id": {
                  "type": "integer"
                },
                "last_status": {
                  "enum": [
                    "passed",
                    "failed",
                    "flapping",
                    "unknown",
                    ""
                  ],
                  "type": "string"
                },
                "last_status_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "os_version": {
                  "type": "string"
                },
                "owner_email": {
                  "type": "string"
                },
                "owner_name": {
                  "type": "string"
                },
                "seconds_active": {
                  "format": "int64",
                  "type": "integer"
                }
              },
              "required": [
                "id",
                "name",
                "branches_tracked",
                "first_seen_at"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "count": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/animals"
      }
    },
    {
      "description": "Animals that failed on a branch within a SHA-bounded window\n\nWindow is bounded by `started_at` of the two SHAs on the named\nbranch — *not* by git topological order. The implementation\ncannot infer commit order from the buildfarm tables alone.",
      "inputs": {
        "properties": {
          "branch": {
            "type": "string"
          },
          "from": {
            "minLength": 7,
            "type": "string"
          },
          "to": {
            "minLength": 7,
            "type": "string"
          }
        },
        "required": [
          "branch",
          "from",
          "to"
        ],
        "type": "object"
      },
      "name": "buildfarm_breaks",
      "outputs": {
        "properties": {
          "branch": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "end_sha": {
            "type": "string"
          },
          "failures": {
            "items": {
              "properties": {
                "animal": {
                  "type": "string"
                },
                "branch": {
                  "type": "string"
                },
                "commit_sha": {
                  "type": "string"
                },
                "completed_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "log_url": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "owner": {
                  "type": "string"
                },
                "stage_failed": {
                  "type": "string"
                },
                "started_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              },
              "required": [
                "branch",
                "status",
                "started_at"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "start_sha": {
            "type": "string"
          },
          "window_end": {
            "format": "date-time",
            "type": "string"
          },
          "window_start": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/breaks"
      }
    },
    {
      "description": "Per-animal status for one PostgreSQL commit",
      "inputs": {
        "properties": {
          "sha": {
            "minLength": 7,
            "type": "string"
          }
        },
        "required": [
          "sha"
        ],
        "type": "object"
      },
      "name": "buildfarm_commit_by_sha",
      "outputs": {
        "properties": {
          "commit_sha": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "rollup": {
            "properties": {
              "failed": {
                "type": "integer"
              },
              "flapping": {
                "type": "integer"
              },
              "passed": {
                "type": "integer"
              },
              "unknown": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "runs": {
            "items": {
              "properties": {
                "animal": {
                  "type": "string"
                },
                "branch": {
                  "type": "string"
                },
                "commit_sha": {
                  "type": "string"
                },
                "completed_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "log_url": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "owner": {
                  "type": "string"
                },
                "stage_failed": {
                  "type": "string"
                },
                "started_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              },
              "required": [
                "branch",
                "status",
                "started_at"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/commit/{sha}"
      }
    },
    {
      "description": "High-level buildfarm health: animal count, recent run counts, currently-failing animals, top owners, OS / branch breakdown, and freshness.",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "buildfarm_overview",
      "outputs": {
        "properties": {
          "animal_count": {
            "type": "integer"
          },
          "by_branch": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object"
          },
          "by_os": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object"
          },
          "currently_failing": {
            "items": {
              "properties": {
                "last_status_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "owner": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "currently_failing_count": {
            "type": "integer"
          },
          "last_run_age_seconds": {
            "format": "int64",
            "type": "integer"
          },
          "last_run_at": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "run_count_24h": {
            "type": "integer"
          },
          "run_count_total": {
            "type": "integer"
          },
          "top_owners": {
            "items": {
              "properties": {
                "count": {
                  "type": "integer"
                },
                "owner": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/overview"
      }
    },
    {
      "description": "Animals run by a single owner",
      "inputs": {
        "properties": {
          "email": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "buildfarm_owner",
      "outputs": {
        "properties": {
          "animals": {
            "items": {
              "properties": {
                "arch": {
                  "type": "string"
                },
                "branches_tracked": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "compiler": {
                  "type": "string"
                },
                "compiler_version": {
                  "type": "string"
                },
                "first_seen_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "id": {
                  "type": "integer"
                },
                "last_status": {
                  "enum": [
                    "passed",
                    "failed",
                    "flapping",
                    "unknown",
                    ""
                  ],
                  "type": "string"
                },
                "last_status_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "os_version": {
                  "type": "string"
                },
                "owner_email": {
                  "type": "string"
                },
                "owner_name": {
                  "type": "string"
                },
                "seconds_active": {
                  "format": "int64",
                  "type": "integer"
                }
              },
              "required": [
                "id",
                "name",
                "branches_tracked",
                "first_seen_at"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "count": {
            "type": "integer"
          },
          "owner_email": {
            "type": "string"
          },
          "owner_name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/owner"
      }
    },
    {
      "description": "Recent buildfarm runs (default status=failed, since=24h)",
      "inputs": {
        "properties": {
          "branch": {
            "type": "string"
          },
          "limit": {
            "default": 100,
            "maximum": 1000,
            "minimum": 1,
            "type": "integer"
          },
          "since": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "default": "failed",
            "enum": [
              "passed",
              "failed",
              "flapping",
              "unknown"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "buildfarm_runs",
      "outputs": {
        "properties": {
          "count": {
            "type": "integer"
          },
          "runs": {
            "items": {
              "properties": {
                "animal": {
                  "type": "string"
                },
                "branch": {
                  "type": "string"
                },
                "commit_sha": {
                  "type": "string"
                },
                "completed_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "log_url": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "owner": {
                  "type": "string"
                },
                "stage_failed": {
                  "type": "string"
                },
                "started_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              },
              "required": [
                "branch",
                "status",
                "started_at"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "buildfarm"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/buildfarm/runs"
      }
    },
    {
      "description": "Catalogue of every calendar feed, with event counts\n\nFeed URLs for all events, regions, countries (with an event in the last year), conference series, the release cycle, teams and organisations. Community event listings come from the PostgreSQL Event Calendar (https://ics.postgresql.life), curated by Andreas Scherbaum and republished with permission.",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "calendars",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/calendars"
      }
    },
    {
      "description": "A combined calendar's feed list and URL",
      "inputs": {
        "properties": {
          "hash": {
            "pattern": "^[0-9a-f]{12}$",
            "type": "string"
          }
        },
        "required": [
          "hash"
        ],
        "type": "object"
      },
      "name": "calendars_bundles_by_hash",
      "outputs": {
        "properties": {
          "excludes": {
            "description": "feed paths left out (\"but not\"); excluding a person, team or org also drops the conferences they speak at",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "feeds": {
            "description": "canonical feed paths",
            "items": {
              "type": "string"
            },
            "sorted": null,
            "type": "array"
          },
          "hash": {
            "pattern": "^[0-9a-f]{12}$",
            "type": "string"
          },
          "names": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "display name per feed path (regions, countries, series, teams, orgs, people)",
            "type": "object"
          },
          "summary": {
            "description": "the selection as one English sentence (also the start of X-WR-CALDESC)",
            "example": "Events in North America but not Mexico, and any appearances by Core Team members globally.",
            "type": "string"
          },
          "url": {
            "example": "https://pg.ddx.io/cal/0123456789ab.ics",
            "type": "string"
          },
          "webcal": {
            "example": "webcal://pg.ddx.io/cal/0123456789ab.ics",
            "type": "string"
          }
        },
        "required": [
          "hash",
          "feeds",
          "url",
          "webcal"
        ],
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/calendars/bundles/{hash}"
      }
    },
    {
      "description": "Combine several pg.ddx.io calendar feeds into ONE subscription. Give feed paths or URLs as listed by calendar_feeds (e.g. events/region/europe, series/pgconf-eu, teams/committers, people/<8hex>, https://pg.ddx.io/cal/orgs/edb.ics; 1-200). Returns the combined feed's hash, canonical feed list, https url and webcal url. The same selection always yields the same URL.",
      "inputs": {
        "properties": {
          "body": {
            "properties": {
              "feeds": {
                "example": [
                  "events/region/europe",
                  "series/pgconf-eu",
                  "teams/committers"
                ],
                "items": {
                  "type": "string"
                },
                "maxItems": 200,
                "minItems": 1,
                "type": "array"
              }
            },
            "required": [
              "feeds"
            ],
            "type": "object"
          }
        },
        "required": [
          "body"
        ],
        "type": "object"
      },
      "name": "calendars_bundles_post",
      "outputs": {
        "properties": {
          "excludes": {
            "description": "feed paths left out (\"but not\"); excluding a person, team or org also drops the conferences they speak at",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "feeds": {
            "description": "canonical feed paths",
            "items": {
              "type": "string"
            },
            "sorted": null,
            "type": "array"
          },
          "hash": {
            "pattern": "^[0-9a-f]{12}$",
            "type": "string"
          },
          "names": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "display name per feed path (regions, countries, series, teams, orgs, people)",
            "type": "object"
          },
          "summary": {
            "description": "the selection as one English sentence (also the start of X-WR-CALDESC)",
            "example": "Events in North America but not Mexico, and any appearances by Core Team members globally.",
            "type": "string"
          },
          "url": {
            "example": "https://pg.ddx.io/cal/0123456789ab.ics",
            "type": "string"
          },
          "webcal": {
            "example": "webcal://pg.ddx.io/cal/0123456789ab.ics",
            "type": "string"
          }
        },
        "required": [
          "hash",
          "feeds",
          "url",
          "webcal"
        ],
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "body_field": "body",
        "call_template_type": "http",
        "content_type": "application/json",
        "http_method": "POST",
        "url": "https://pg.ddx.io/api/v2/calendars/bundles"
      }
    },
    {
      "description": "PostgreSQL community events in a date window: conferences, PGDays, meetups, online events, Call for Papers and registration deadlines, conference talks (with speakers and their pg.ddx.io person hash), Talking Postgres episodes, release dates and commitfests. Same data as the iCalendar feeds at https://pg.ddx.io/calendars (community event listings from the PostgreSQL Event Calendar, curated by Andreas Scherbaum).",
      "inputs": {
        "properties": {
          "from": {
            "description": "default today",
            "format": "date",
            "type": "string"
          },
          "kind": {
            "enum": [
              "event",
              "cfp",
              "deadline",
              "session",
              "release",
              "signal"
            ],
            "type": "string"
          },
          "limit": {
            "default": 50,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "minimum": 0,
            "type": "integer"
          },
          "person": {
            "description": "pg.ddx.io person hash",
            "pattern": "^[0-9a-f]{8}$",
            "type": "string"
          },
          "series": {
            "type": "string"
          },
          "speaker": {
            "description": "speaker name substring",
            "type": "string"
          },
          "to": {
            "description": "default from + 90 days",
            "format": "date",
            "type": "string"
          },
          "where": {
            "description": "ISO country, country/city name, region slug, series slug, or online",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "calendars_events",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/calendars/events"
      }
    },
    {
      "description": "An organisation's feed URL, or null when it has no approved employees",
      "inputs": {
        "properties": {
          "org": {
            "type": "string"
          }
        },
        "required": [
          "org"
        ],
        "type": "object"
      },
      "name": "calendars_org",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/calendars/org"
      }
    },
    {
      "description": "Find a person for a combined calendar (the /calendars picker)\n\n`q` is a name (fuzzy, so misspellings match), an email address, a Message-ID, or a message link (https://postgr.es/m/{id}, https://www.postgresql.org/message-id/[flat/]{id}, https://pg.ddx.io/m/{list}/{id}/, https://pg.ddx.io/id/{id}); a message resolves to its sender. Up to 10 people with their feed path and appearance count (0 = no appearances yet; the feed exists but is empty). Never returns email addresses. At most 1 KB.",
      "inputs": {
        "properties": {
          "q": {
            "maxLength": 1024,
            "type": "string"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "name": "calendars_people_suggest",
      "outputs": {
        "properties": {
          "match": {
            "enum": [
              "name",
              "email",
              "message"
            ],
            "type": "string"
          },
          "people": {
            "items": {
              "properties": {
                "appearances": {
                  "type": "integer"
                },
                "feed": {
                  "example": "people/1a2b3c4d",
                  "type": "string"
                },
                "hash": {
                  "pattern": "^[0-9a-f]{8}$",
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/calendars/people/suggest"
      }
    },
    {
      "description": "A person's feed URL, or null when they have no public appearances",
      "inputs": {
        "properties": {
          "hash": {
            "pattern": "^[0-9a-f]{8}$",
            "type": "string"
          }
        },
        "required": [
          "hash"
        ],
        "type": "object"
      },
      "name": "calendars_person_by_hash",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/calendars/person/{hash}"
      }
    },
    {
      "description": "Conference series with feed URL, session count and next edition",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "calendars_series",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "calendars"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/calendars/series"
      }
    },
    {
      "description": "Code at a commit (text and symbols at a rev)\n\nThe lines of the repository at `rev` that hold `q` (a fixed string, case-insensitive; at most 5 per file and 300 in all, `capped` when there were more), grouped by file, and the symbols named `q` in the symbol index. Every hit links the code browser at the resolved commit, /c/<repo>/<sha>/<path>#L<n>. The symbol index holds the indexed commits only: `symbols_at` is `head` when `sha` is one of them, else `index` (line numbers from the indexed commit). For any version and regex search use /api/v2/code/history/search.",
      "inputs": {
        "properties": {
          "path": {
            "description": "A path prefix in the repository (src/backend/).",
            "type": "string"
          },
          "q": {
            "maxLength": 200,
            "type": "string"
          },
          "repo": {
            "default": "postgres",
            "type": "string"
          },
          "rev": {
            "description": "A branch, a tag or a commit sha; default the default branch (master for postgres).",
            "type": "string"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "name": "code_at",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/at"
      }
    },
    {
      "description": "Per-line blame of a postgres file at any commit (code-history index): the commit that wrote each line, as `git blame` with git's default diff. ignore_revs (default true) passes through the pgindent/reformat commits of .git-blame-ignore-revs when they replaced lines one-for-one; reverse adds the commit that removed each line later on the version's branch. At most 2000 lines per call; commits lists author, date and subject per short sha. proposals=true adds, per line, the earliest posted patch (Message-ID, date) on its commit's threads that added it; proposals_complete=false when the window spans more than 10 commits (those with the most lines are read). Lines under 4 characters or without a letter or digit get none. Not the same as git_blame, which returns a file's commit history.",
      "inputs": {
        "properties": {
          "end_line": {
            "minimum": 1,
            "type": "integer"
          },
          "ignore_revs": {
            "default": "true",
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "proposals": {
            "default": "false",
            "description": "Per line, the earliest patch mail on its commit's Discussion threads that added it (`proposals`, `proposals_complete`).",
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          },
          "reverse": {
            "default": "false",
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          },
          "start_line": {
            "default": 1,
            "minimum": 1,
            "type": "integer"
          },
          "version": {
            "description": "A SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), `<ref>@YYYY-MM-DD` (the branch's last commit by that day) or `<ref>~N`. Default: the newest release branch's head. Unresolvable values are a 400.",
            "type": "string"
          }
        },
        "required": [
          "path"
        ],
        "type": "object"
      },
      "name": "code_history_blame",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/history/blame"
      }
    },
    {
      "description": "One postgres commit from the code-history index: message, parsed trailers (names only), Discussion threads (links to the archived thread on /m/), back-patch siblings on other branches, first_releases (per branch the change landed on: sha, release such as 14.23, first_version incl. betas, shipped=false when reverted before that release; null release = not yet released), reverted_by and reverts, posted_patch (of the patch mails on its Discussion threads up to its commit date, the one whose changed lines match the commit's best: message_id, date, subject, from, score 0-1, url; null when none shares at least 0.2), files changed with line counts, and its diff rendered from the index (at most 3000 lines; diff_complete says whether it was cut). Accepts a SHA (7+ hex), branch, tag or any version form.",
      "inputs": {
        "properties": {
          "commit": {
            "type": "string"
          },
          "context": {
            "default": 3,
            "maximum": 1000,
            "minimum": 0,
            "type": "integer"
          },
          "diff": {
            "default": "true",
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          },
          "paths": {
            "type": "string"
          }
        },
        "required": [
          "commit"
        ],
        "type": "object"
      },
      "name": "code_history_commit_by_commit",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/history/commit/{commit}"
      }
    },
    {
      "description": "Search postgres commits (code-history index), newest first, like git log: range (a rev, or A..B; default the newest release branch), message (regex, case-insensitive), author (regex over author, committer and Author/Co-authored-by/Reviewed-by trailers), paths, since/until (YYYY-MM-DD), changed_lines (a regex an added or removed line matches, as git log -G) and occurrences (a string whose count in a file changed, as git log -S). complete=false when changed_lines/occurrences matched more lines than it reads (300,000): commits may be missing.",
      "inputs": {
        "properties": {
          "author": {
            "type": "string"
          },
          "budget_ms": {
            "default": 10000,
            "maximum": 15000,
            "minimum": 100,
            "type": "integer"
          },
          "changed_lines": {
            "type": "string"
          },
          "limit": {
            "default": 30,
            "maximum": 200,
            "minimum": 1,
            "type": "integer"
          },
          "message": {
            "type": "string"
          },
          "occurrences": {
            "type": "string"
          },
          "offset": {
            "default": 0,
            "minimum": 0,
            "type": "integer"
          },
          "paths": {
            "type": "string"
          },
          "range": {
            "type": "string"
          },
          "since": {
            "format": "date",
            "type": "string"
          },
          "until": {
            "format": "date",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "code_history_commits",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/history/commits"
      }
    },
    {
      "description": "Read a file of the postgres source at any commit, branch, tag or date from the code-history index: numbered lines, at most 2000 per call (page with start_line/end_line), byte-exact to git. Says total_lines and complete; binary files return their metadata only.",
      "inputs": {
        "properties": {
          "end_line": {
            "minimum": 1,
            "type": "integer"
          },
          "path": {
            "type": "string"
          },
          "start_line": {
            "default": 1,
            "minimum": 1,
            "type": "integer"
          },
          "version": {
            "description": "A SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), `<ref>@YYYY-MM-DD` (the branch's last commit by that day) or `<ref>~N`. Default: the newest release branch's head. Unresolvable values are a 400.",
            "type": "string"
          }
        },
        "required": [
          "path"
        ],
        "type": "object"
      },
      "name": "code_history_file",
      "outputs": {
        "properties": {
          "binary": {
            "type": "boolean"
          },
          "blob": {
            "type": "string"
          },
          "complete": {
            "type": "boolean"
          },
          "end_line": {
            "type": "integer"
          },
          "final_newline": {
            "type": "boolean"
          },
          "latin1": {
            "type": "boolean"
          },
          "lines": {
            "items": {
              "description": "[line number, text]",
              "type": "array"
            },
            "type": "array"
          },
          "path": {
            "type": "string"
          },
          "ref": {
            "type": "string"
          },
          "sha": {
            "type": "string"
          },
          "start_line": {
            "type": "integer"
          },
          "total_lines": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/history/file"
      }
    },
    {
      "description": "List the files of the postgres source under a directory at any commit, branch, tag or date (code-history index), with line counts; depth folds deeper paths into directories with file counts; glob filters paths.",
      "inputs": {
        "properties": {
          "depth": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "glob": {
            "type": "string"
          },
          "limit": {
            "default": 500,
            "maximum": 5000,
            "minimum": 1,
            "type": "integer"
          },
          "path": {
            "type": "string"
          },
          "version": {
            "description": "A SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), `<ref>@YYYY-MM-DD` (the branch's last commit by that day) or `<ref>~N`. Default: the newest release branch's head. Unresolvable values are a 400.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "code_history_files",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/history/files"
      }
    },
    {
      "description": "Search the postgres source at any commit, branch, tag or date (or across history), from the code-history index: every line of every commit, byte-exact. A literal by default; match=regex for a PostgreSQL regex (^ and $ are per line; \\b \\< \\> as in grep), match=identifier for any of snake_case/CamelCase/UPPER spellings. File sets agree with `git grep -l` at the same commit. Results name the resolved sha and ref. complete=false means the totals are lower bounds (cut says why). With history (all | <rev> | A..B) it returns every matching line any commit in the range had, with the commit that added it and the one that removed it.",
      "inputs": {
        "properties": {
          "budget_ms": {
            "default": 10000,
            "maximum": 15000,
            "minimum": 100,
            "type": "integer"
          },
          "case_sensitive": {
            "default": "true",
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          },
          "context": {
            "default": 0,
            "maximum": 20,
            "minimum": 0,
            "type": "integer"
          },
          "exclude": {
            "description": "Comma-separated path globs to drop",
            "type": "string"
          },
          "history": {
            "description": "all, a rev, or A..B",
            "type": "string"
          },
          "include": {
            "description": "Comma-separated path globs to keep",
            "type": "string"
          },
          "limit": {
            "default": 100,
            "maximum": 2000,
            "minimum": 1,
            "type": "integer"
          },
          "match": {
            "default": "literal",
            "enum": [
              "literal",
              "regex",
              "identifier"
            ],
            "type": "string"
          },
          "offset": {
            "default": 0,
            "minimum": 0,
            "type": "integer"
          },
          "output": {
            "default": "lines",
            "enum": [
              "lines",
              "files",
              "counts"
            ],
            "type": "string"
          },
          "paths": {
            "description": "Comma-separated directories or globs",
            "type": "string"
          },
          "query": {
            "type": "string"
          },
          "version": {
            "description": "A SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), `<ref>@YYYY-MM-DD` (the branch's last commit by that day) or `<ref>~N`. Default: the newest release branch's head. Unresolvable values are a 400.",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "code_history_search",
      "outputs": {
        "properties": {
          "complete": {
            "type": "boolean"
          },
          "counts": {
            "items": {
              "type": "array"
            },
            "type": "array"
          },
          "cut": {
            "nullable": true,
            "type": "string"
          },
          "files": {
            "items": {
              "properties": {
                "lines": {
                  "type": "integer"
                },
                "path": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "lines": {
            "description": "history mode",
            "items": {
              "properties": {
                "added_at": {
                  "type": "string"
                },
                "added_by": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "removed_by": {
                  "nullable": true,
                  "type": "string"
                },
                "text": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "matches": {
            "items": {
              "properties": {
                "context": {
                  "items": {
                    "type": "array"
                  },
                  "type": "array"
                },
                "line": {
                  "type": "integer"
                },
                "path": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "ref": {
            "type": "string"
          },
          "sha": {
            "type": "string"
          },
          "total_files": {
            "type": "integer"
          },
          "total_lines": {
            "type": "integer"
          },
          "version": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/history/search"
      }
    },
    {
      "description": "Symbol & code search\n\nSearch source symbols (functions, structs, macros, types, SQL objects). GitHub-style filters parsed from `q`: `lang:c`, `path:src/backend/`, `symbol:Name`, `kind:function`, `repo:postgres`. `repo` takes one name or several comma-separated (`repo=ucb-ingres-8.9,ucb-ingres-8.9-linux`, at most 32); with several, they are searched together and each result names its `repository`.",
      "inputs": {
        "properties": {
          "kind": {
            "type": "string"
          },
          "lang": {
            "type": "string"
          },
          "limit": {
            "default": 50,
            "maximum": 200,
            "type": "integer"
          },
          "q": {
            "type": "string"
          },
          "repo": {
            "default": "postgres",
            "description": "Repository name, or a comma-separated list",
            "type": "string"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "name": "code_search",
      "outputs": {
        "properties": {
          "query": {
            "type": "string"
          },
          "repository": {
            "type": "string"
          },
          "results": {
            "items": {
              "properties": {
                "end_line": {
                  "type": "integer"
                },
                "file": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "language": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "qualified_name": {
                  "type": "string"
                },
                "repository": {
                  "description": "Only when repo names several",
                  "type": "string"
                },
                "start_line": {
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "total": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/search"
      }
    },
    {
      "description": "Resolve a symbol (by name, or the symbol enclosing a line)\n\nEither `?repo=&name=` for a symbol by (qualified) name with its signature, doc, and caller/callee lists, or `?repo=&path=&line=` for the symbol enclosing a source line (go-to-definition for the code browser).",
      "inputs": {
        "properties": {
          "line": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "repo": {
            "default": "postgres",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "code_symbol",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "code"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/code/symbol"
      }
    },
    {
      "description": "Currently active commitfest\n\nReturns the in-progress commitfest if one exists; otherwise the\nhighest-numbered open commitfest; otherwise the highest-numbered\ncommitfest overall.",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "commitfest_active",
      "outputs": {
        "properties": {
          "end_date": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "number": {
            "type": "integer"
          },
          "start_date": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "tags": [
        "commitfest"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/commitfest/active"
      }
    },
    {
      "description": "Rolling window of commitfest entries updated in the last N days. Returns the entries plus a status histogram. Uses the relational commitfest.entries table for predictable latency.",
      "inputs": {
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "since": {
            "description": "RFC3339 cutoff (default 7 days ago).",
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "commitfest_activity",
      "outputs": {
        "properties": {
          "by_status": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object"
          },
          "count": {
            "type": "integer"
          },
          "entries": {
            "items": {
              "properties": {
                "cf_id": {
                  "type": "integer"
                },
                "cf_number": {
                  "type": "integer"
                },
                "last_updated": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "since": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "tags": [
        "commitfest"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/commitfest/activity"
      }
    },
    {
      "description": "Cross-domain feed: recent failed buildfarm runs for a named animal, plus commitfest entries with cfbot :failing rollups whose tracked branches overlap the animal's. Note: buildfarm runs commit SHAs and cfbot runs cf/<id> branches, so this verb correlates by branch overlap and time window — not by direct schema join.",
      "inputs": {
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "commitfest_animal_failures",
      "outputs": {
        "properties": {
          "animal": {
            "type": "string"
          },
          "branches_tracked": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "cfbot_count": {
            "type": "integer"
          },
          "cfbot_failing": {
            "items": {
              "properties": {
                "cf_id": {
                  "type": "integer"
                },
                "commitfest_number": {
                  "type": "integer"
                },
                "entry_status": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "correlation_note": {
            "type": "string"
          },
          "failure_count": {
            "type": "integer"
          },
          "recent_failures": {
            "items": {
              "properties": {
                "animal": {
                  "type": "string"
                },
                "branch": {
                  "type": "string"
                },
                "commit_sha": {
                  "type": "string"
                },
                "completed_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "log_url": {
                  "type": "string"
                },
                "os": {
                  "type": "string"
                },
                "owner": {
                  "type": "string"
                },
                "stage_failed": {
                  "type": "string"
                },
                "started_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              },
              "required": [
                "branch",
                "status",
                "started_at"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "commitfest"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/commitfest/animal/{name}/failures"
      }
    },
    {
      "description": "Every commitfest",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "commitfest_commitfests",
      "outputs": {
        "properties": {
          "commitfests": {
            "items": {
              "properties": {
                "current": {
                  "type": "boolean"
                },
                "cycle": {
                  "description": "Release cycle for grouping: PG20, PG19, 2023",
                  "type": "string"
                },
                "end_date": {
                  "format": "date",
                  "nullable": true,
                  "type": "string"
                },
                "entries": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "number": {
                  "type": "integer"
                },
                "start_date": {
                  "format": "date",
                  "nullable": true,
                  "type": "string"
                },
                "status": {
                  "enum": [
                    "open",
                    "in_progress",
                    "closed",
                    "draft"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "current": {
            "nullable": true,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/commitfest/commitfests"
      }
    },
    {
      "description": "Repository branches tracked for a commitfest entry. Joins commitfest.entry_repos with ag_repositories so callers see repo name + branch_name + is_authoritative.",
      "inputs": {
        "properties": {
          "cf_id": {
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "cf_id"
        ],
        "type": "object"
      },
      "name": "commitfest_entry_branches",
      "outputs": {
        "properties": {
          "branches": {
            "items": {
              "properties": {
                "branch_name": {
                  "type": "string"
                },
                "discovered_at": {
                  "format": "date-time",
                  "type": "string"
                },
                "is_authoritative": {
                  "type": "boolean"
                },
                "repo_id": {
                  "type": "integer"
                },
                "repo_name": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "cf_id": {
            "type": "integer"
          },
          "count": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "commitfest"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/commitfest/entry/{cf_id}/branches"
      }
    },
    {
      "description": "Status changes for a commitfest entry across commitfests. The relational table doesn't carry an audit log, so we approximate the patch's lifeline by joining on shared :entry/thread-message-id (precise) and falling back to title-prefix substring (weak).",
      "inputs": {
        "properties": {
          "cf_id": {
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "cf_id"
        ],
        "type": "object"
      },
      "name": "commitfest_entry_history",
      "outputs": {
        "properties": {
          "cf_id": {
            "type": "integer"
          },
          "count": {
            "type": "integer"
          },
          "history": {
            "items": {
              "properties": {
                "cf_id": {
                  "type": "integer"
                },
                "cf_number": {
                  "type": "integer"
                },
                "last_updated": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "linkage": {
                  "enum": [
                    "self",
                    "thread-mid",
                    "title-prefix"
                  ],
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "commitfest"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/commitfest/entry/{cf_id}/history"
      }
    },
    {
      "description": "Commitfest entry search\n\nFull-text search (websearch syntax) over commitfest.postgresql.org entries: the title ranks first, then author, reviewer and committer names. `cf` picks the commitfests: `current` (default) is the one https://commitfest.postgresql.org/current/ shows (in progress, else open); `all`; or numbers, where `current` may stand among them. An entry belongs to every commitfest it was listed in. People are names only (no handles or addresses); `thread_url` is the entry's first archived thread on this site, pgsql-hackers first, skipping any message whose Message-ID holds an address (its sender's or a known person's); when every one does it is the list page and `thread_withheld` is true.",
      "inputs": {
        "properties": {
          "cf": {
            "default": "current",
            "description": "current, all, or a comma list of commitfest numbers, e.g. 62,61 or current,55 (see /api/v2/commitfest/commitfests).",
            "type": "string"
          },
          "limit": {
            "default": 20,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "maximum": 10000,
            "type": "integer"
          },
          "q": {
            "description": "Words and search operators. A source the operators exclude returns no results and a skipped reason; docs with after:/before: and no versions= search the versions current then.",
            "examples": [
              "vacuum after:2024 site:pgsql-hackers",
              "link:*://example.org",
              "subject:/^\\[PATCH/ from:jane"
            ],
            "maxLength": 500,
            "type": "string"
          },
          "sort": {
            "default": "relevance",
            "description": "likely / unlikely order by the commit model's estimate (P(commit) in the release when q has release:, else in the commitfest), most or least likely first, then by relevance; entries without an estimate come last.",
            "enum": [
              "relevance",
              "likely",
              "unlikely"
            ],
            "type": "string"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "name": "commitfest_search",
      "outputs": {
        "properties": {
          "cf": {
            "description": "\"all\", or the commitfest numbers searched",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              }
            ]
          },
          "current": {
            "nullable": true,
            "type": "integer"
          },
          "query": {
            "type": "string"
          },
          "results": {
            "items": {
              "properties": {
                "authors": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "cf_id": {
                  "type": "integer"
                },
                "cf_name": {
                  "description": "e.g. PG20-3, 2023-11",
                  "nullable": true,
                  "type": "string"
                },
                "cf_number": {
                  "type": "integer"
                },
                "commitfests": {
                  "description": "Every commitfest it was listed in, newest first",
                  "items": {
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "number": {
                        "type": "integer"
                      },
                      "status": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "committers": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "last_updated": {
                  "description": "Latest mail on the entry",
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "outlook": {
                  "description": "The commit model's daily estimate for an entry in an open commitfest (a Bayesian model of the patch, never a judgement of a person), else null.\n",
                  "nullable": true,
                  "properties": {
                    "band_cf": {
                      "description": "low < 0.15 <= medium < 0.40 <= high",
                      "enum": [
                        "low",
                        "medium",
                        "high"
                      ],
                      "type": "string"
                    },
                    "band_release": {
                      "enum": [
                        "low",
                        "medium",
                        "high"
                      ],
                      "type": "string"
                    },
                    "commitfest": {
                      "properties": {
                        "closes": {
                          "format": "date",
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "number": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    },
                    "computed_at": {
                      "format": "date-time",
                      "type": "string"
                    },
                    "estimate": {
                      "type": "string"
                    },
                    "health": {
                      "enum": [
                        "healthy",
                        "unhealthy",
                        "unknown"
                      ],
                      "type": "string"
                    },
                    "model": {
                      "example": "bayes",
                      "type": "string"
                    },
                    "model_version": {
                      "type": "string"
                    },
                    "p_cf": {
                      "description": "P(committed in this commitfest by its close)",
                      "type": "number"
                    },
                    "p_release": {
                      "description": "P(committed in this release by its feature freeze)",
                      "type": "number"
                    },
                    "release": {
                      "properties": {
                        "feature_freeze": {
                          "format": "date",
                          "nullable": true,
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                },
                "reviewers": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "score": {
                  "type": "number"
                },
                "status": {
                  "description": "Needs review, Committed, ... in the commitfest it lives in now",
                  "type": "string"
                },
                "thread_url": {
                  "description": "/m/<list>/<message-id>/, or /m/<list>/ when withheld",
                  "nullable": true,
                  "type": "string"
                },
                "thread_withheld": {
                  "description": "Every linked Message-ID holds an address, so thread_url is the list page",
                  "type": "boolean"
                },
                "threads": {
                  "description": "Mail threads attached to the entry",
                  "type": "integer"
                },
                "title": {
                  "type": "string"
                },
                "url": {
                  "description": "https://commitfest.postgresql.org/patch/<cf_id>/",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "total": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/commitfest/search"
      }
    },
    {
      "description": "Aggregate counts across all commitfests",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "commitfest_statistics",
      "outputs": {
        "properties": {
          "committed": {
            "type": "integer"
          },
          "moved_to_different_cf": {
            "type": "integer"
          },
          "needs_review": {
            "type": "integer"
          },
          "open": {
            "type": "integer"
          },
          "ready_for_committer": {
            "type": "integer"
          },
          "rejected": {
            "type": "integer"
          },
          "returned_with_feedback": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "unique_authors": {
            "type": "integer"
          },
          "waiting_on_author": {
            "type": "integer"
          },
          "withdrawn": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "commitfest"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/mcp/api/commitfest/statistics"
      }
    },
    {
      "description": "Contributor leaderboard\n\nEach row has `hash` and `url`, the page path to link (the person's stated preferred address, else the hash). The same `url` is on /ranking, /org, /teams/{key} and /groups/{key} rows.",
      "inputs": {
        "properties": {
          "limit": {
            "default": 50,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "community_contributors",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/contributors"
      }
    },
    {
      "description": "Recognized user groups with their volunteer counts",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "community_groups",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/groups"
      }
    },
    {
      "description": "One user group's current volunteers",
      "inputs": {
        "properties": {
          "key": {
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "type": "object"
      },
      "name": "community_groups_by_key",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/groups/{key}"
      }
    },
    {
      "description": "One organization's contributions, top contributors and its own teams\n\n`teams` lists the employer's PostgreSQL teams (e.g. a company's community team), each with its current members (name, hash, role; lead first).",
      "inputs": {
        "properties": {
          "orgname": {
            "maxLength": 256,
            "type": "string"
          }
        },
        "required": [
          "orgname"
        ],
        "type": "object"
      },
      "name": "community_org",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/org"
      }
    },
    {
      "description": "Contributions grouped by organization",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "community_orgs",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/orgs"
      }
    },
    {
      "description": "One contributor's profile (contributions, merit, affiliations, CVEs)",
      "inputs": {
        "properties": {
          "hash": {
            "description": "The 8-hex content hash of a contributor email.",
            "type": "string"
          }
        },
        "required": [
          "hash"
        ],
        "type": "object"
      },
      "name": "community_person_by_hash",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/person/{hash}"
      }
    },
    {
      "description": "Extensions a person leads or contributes to",
      "inputs": {
        "properties": {
          "hash": {
            "pattern": "^[0-9a-f]{8}$",
            "type": "string"
          }
        },
        "required": [
          "hash"
        ],
        "type": "object"
      },
      "name": "community_person_extensions",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/person/{hash}/extensions"
      }
    },
    {
      "description": "Merit-ranked contributors (with trend)",
      "inputs": {
        "properties": {
          "limit": {
            "default": 50,
            "maximum": 500,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "type": "integer"
          },
          "tier": {
            "description": "Core Team | Major Contributors | Significant Contributors",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "community_ranking",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/ranking"
      }
    },
    {
      "description": "The person page of an email address\n\nAny address of a person opens their page (not an alias of someone who hides their email or their page). Without `format=json` it is the old redirect: 301 to `/community/<hash>/`, or 302 to `/community/` for an unknown address. With `format=json` it answers `{hash, url}`: `url` is the page path links use, `/community/<address>/` when the person stated a preferred address through /community/claim, else `/community/<hash>/`. The site serves `/community/<any of their addresses>/` (and `/followups`, `/impact`, `/data.json`) in place.",
      "inputs": {
        "properties": {
          "email": {
            "type": "string"
          },
          "format": {
            "enum": [
              "json"
            ],
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "type": "object"
      },
      "name": "community_resolve",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/resolve"
      }
    },
    {
      "description": "Project teams (Core, Committers, ...) and employers' teams with member counts\n\nCurrent members of each team roster: the postgresql.org teams and committees, curated teams, and employers' PostgreSQL teams (`org` names the employer). `key` is the slug /api/v2/community/teams/{key} takes.",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "community_teams",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/teams"
      }
    },
    {
      "description": "One team's current members (lead first, then by merit)",
      "inputs": {
        "properties": {
          "key": {
            "description": "Team slug (or its display name).",
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "type": "object"
      },
      "name": "community_teams_by_key",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/community/teams/{key}"
      }
    },
    {
      "description": "PostgreSQL documentation search\n\nFull-text search (websearch syntax: `\"phrase\"`, `-term`, `or`) over the postgresql.org documentation; title matches rank first. A page that matches in several of the selected versions is one result whose `versions` lists each (newest first). The /docs/current/ copies are not searched (they duplicate the current release). `snippet_html` is escaped HTML with the matches in `<mark>`. Berkeley POSTGRES documents are version `ucbpg`, University INGRES documents `ucbingres`. With `define:<term>` in `q` the response also has `definition`: the PostgreSQL glossary entry (of the first numeric version searched), SQL standard feature (by ID such as T611, or name) or SQL key word for the term. Its text is `paragraphs` of segments; a segment with `link` points at another glossary term (`define_url` on /search and the docs entry `url`), a docs section or command page, or an SQL feature. Plain text, never HTML.",
      "inputs": {
        "properties": {
          "limit": {
            "default": 20,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "maximum": 10000,
            "type": "integer"
          },
          "q": {
            "description": "Words and search operators. A source the operators exclude returns no results and a skipped reason; docs with after:/before: and no versions= search the versions current then.",
            "examples": [
              "vacuum after:2024 site:pgsql-hackers",
              "link:*://example.org",
              "subject:/^\\[PATCH/ from:jane"
            ],
            "maxLength": 500,
            "type": "string"
          },
          "versions": {
            "description": "Comma list, e.g. 18,17, ucbpg or ucbingres; `current` names the current release. Default: the current release (see /api/v2/docs/versions).",
            "type": "string"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "name": "docs_search",
      "outputs": {
        "properties": {
          "definition": {
            "description": "The answer to define:<term> (AgoraEx.Define).",
            "properties": {
              "also": {
                "description": "Other sources that match too (same shape, without also).",
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "define_url": {
                "type": "string"
              },
              "feature": {
                "description": "sql_feature: id, name, area, core, comment, support (release => bool), since",
                "type": "object"
              },
              "found": {
                "type": "boolean"
              },
              "keyword": {
                "description": "sql_keyword: word, postgresql (category or null), requires_as, standard (edition => reserved | non-reserved), editions",
                "type": "object"
              },
              "link_count": {
                "type": "integer"
              },
              "match": {
                "description": "exact: the entry or ID; alias: without qualifier, acronym or plural; see: a See-X entry followed; name: a feature name containing the term; text: no entry named so, the definition using the word most.",
                "enum": [
                  "exact",
                  "alias",
                  "see",
                  "name",
                  "text",
                  "none"
                ],
                "type": "string"
              },
              "note": {
                "type": "string"
              },
              "paragraphs": {
                "items": {
                  "items": {
                    "properties": {
                      "link": {
                        "description": "kind term: a glossary entry (term, define_url, url = docs anchor); doc: a docs section or command page (title, url); sql_feature: (id, title, url = /sql-standards#ID, define_url).",
                        "properties": {
                          "define_url": {
                            "type": "string"
                          },
                          "id": {
                            "type": "string"
                          },
                          "kind": {
                            "enum": [
                              "term",
                              "doc",
                              "sql_feature"
                            ],
                            "type": "string"
                          },
                          "term": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "text": {
                        "description": "Plain text; the client escapes it.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "text"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "type": "array"
              },
              "see_also": {
                "items": {
                  "properties": {
                    "link": {
                      "description": "kind term: a glossary entry (term, define_url, url = docs anchor); doc: a docs section or command page (title, url); sql_feature: (id, title, url = /sql-standards#ID, define_url).",
                      "properties": {
                        "define_url": {
                          "type": "string"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "enum": [
                            "term",
                            "doc",
                            "sql_feature"
                          ],
                          "type": "string"
                        },
                        "term": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "text": {
                      "description": "Plain text; the client escapes it.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "text"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "source": {
                "enum": [
                  "glossary",
                  "sql_feature",
                  "sql_keyword",
                  null
                ],
                "nullable": true,
                "type": "string"
              },
              "source_label": {
                "example": "PostgreSQL 18 glossary",
                "type": "string"
              },
              "term": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "url": {
                "description": "The entry in the docs, or /sql-standards#ID",
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            },
            "required": [
              "term",
              "found",
              "match",
              "paragraphs",
              "see_also",
              "link_count",
              "also"
            ],
            "type": "object"
          },
          "query": {
            "type": "string"
          },
          "results": {
            "items": {
              "properties": {
                "path": {
                  "type": "string"
                },
                "score": {
                  "type": "number"
                },
                "snippet": {
                  "type": "string"
                },
                "snippet_html": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "url": {
                  "description": "Canonical page URL of the newest matching version",
                  "type": "string"
                },
                "version": {
                  "type": "string"
                },
                "versions": {
                  "items": {
                    "properties": {
                      "url": {
                        "type": "string"
                      },
                      "version": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "total": {
            "description": "Results (collapsed pages), not rows.",
            "type": "integer"
          },
          "versions": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/docs/search"
      }
    },
    {
      "description": "Documentation versions stored, with page counts",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "docs_versions",
      "outputs": {
        "properties": {
          "current": {
            "nullable": true,
            "type": "string"
          },
          "default": {
            "nullable": true,
            "type": "string"
          },
          "versions": {
            "items": {
              "properties": {
                "pages": {
                  "type": "integer"
                },
                "version": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/docs/versions"
      }
    },
    {
      "description": "PostgreSQL extensions with usage weight and lead/contributor counts\n\nFrom PGXN, a curated list of widely-installed extensions not on PGXN, and pgsql-announce. usage_weight is a proxy (Debian popcon installs and GitHub stars, log-scaled): PGXN publishes no usage ranking.",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "extensions",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/extensions"
      }
    },
    {
      "description": "One extension with its leads and contributors",
      "inputs": {
        "properties": {
          "slug": {
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "extensions_by_slug",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "community"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/extensions/{slug}"
      }
    },
    {
      "description": "GraphQL endpoint (mail, git, commitfest, buildfarm, community)\n\nA single GraphQL endpoint. POST a JSON body `{\"query\": \"...\"}`. The GraphiQL explorer is served to browsers (Accept: text/html) at the same URL. Queries include person(hash:) (with appearances and calendar), ranking(tier:), orgs, teams, search, thread, repositoryCommits, commitfests, animals, calendarEvents(from:, to:, kind:, where:, series:, speaker:, person:) and calendarSeries.",
      "inputs": {
        "properties": {
          "body": {
            "properties": {
              "operationName": {
                "type": "string"
              },
              "query": {
                "type": "string"
              },
              "variables": {
                "type": "object"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "body"
        ],
        "type": "object"
      },
      "name": "graphql_post",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "graphql"
      ],
      "tool_call_template": {
        "body_field": "body",
        "call_template_type": "http",
        "content_type": "application/json",
        "http_method": "POST",
        "url": "https://pg.ddx.io/api/graphql"
      }
    },
    {
      "description": "List mailing-list inboxes",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "inboxes",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "mail"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/inboxes"
      }
    },
    {
      "description": "Documents that link to a URL\n\nEvery stored document whose text links to a URL: mail, documentation, wiki (current text), git commit messages and commitfest titles (community.url_refs), newest first, with counts per kind. Discord is not included (its archive is never shown as message content or links). The `link:` operator of the search endpoints uses the same match. Mail rows carry `quoted` (the URL appears only in quoted `>` text).",
      "inputs": {
        "properties": {
          "kind": {
            "enum": [
              "mail",
              "docs",
              "wiki",
              "git",
              "commitfest"
            ],
            "type": "string"
          },
          "limit": {
            "default": 20,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "maximum": 10000,
            "type": "integer"
          },
          "url": {
            "description": "A URL glob. `example.org` (no scheme or path) = any URL on that host or its subdomains; `https://example.org/a/` = that URL and everything under it; `*://example.org` = any scheme; `*` elsewhere matches any run of characters. A leading `www.` is ignored; the fragment is dropped.",
            "maxLength": 2000,
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "links",
      "outputs": {
        "properties": {
          "counts": {
            "additionalProperties": {
              "type": "integer"
            },
            "description": "Documents per kind.",
            "type": "object"
          },
          "kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "results": {
            "items": {
              "properties": {
                "date": {
                  "format": "date-time",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "kind": {
                  "type": "string"
                },
                "num": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "quoted": {
                  "type": "boolean"
                },
                "ref": {
                  "description": "The document key: mail num, doc page id, wiki page id, \"repo_id:commit\", commitfest id.",
                  "type": "string"
                },
                "url": {
                  "description": "The normalised URL linked.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "total": {
            "description": "Documents of the selected kind (all kinds when none).",
            "type": "integer"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "url",
          "total",
          "counts",
          "results"
        ],
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/links"
      }
    },
    {
      "description": "Cross-inbox mailing-list search\n\nFull-text + semantic search over all mailing lists. One result per thread unless `all=1`. `q` takes the search operators of `#/components/schemas/SearchQuery` (`after:2024`, `site:pgsql-bugs`, `from:`, `intitle:`, `filetype:patch`, `link:example.org`, `/regex/`, ...). A query with operators and no words lists matches newest first. The response names the recognised `operators`, and `warnings` for unusable ones, for a keyword search that ran out of its budget (`budget_ms`, default 4.5 s; its results are then incomplete; a plain query of several words then shows the messages with every word, or all but its commonest, and hybrid mode the semantic matches), and for a match count that ran out of time (`total` is then at least the results shown). A scoped count stops at 10,000: `total_capped: true` means `total` is a lower bound and there are more matches. `complete` is false when any of those holds (`timed_out`, `total_partial`, `total_capped`). A query the operators exclude from mail (`site:docs`) returns no results and a `skipped` reason.",
      "inputs": {
        "properties": {
          "all": {
            "description": "1 = every matching message, not one per thread.",
            "type": "string"
          },
          "budget_ms": {
            "description": "Time budget for the search; every limit scales in proportion. Default 4500 (the engine limits).",
            "maximum": 15000,
            "minimum": 100,
            "type": "integer"
          },
          "limit": {
            "default": 50,
            "maximum": 200,
            "type": "integer"
          },
          "list": {
            "description": "Restrict to these lists (comma-separated names); omit for all.",
            "type": "string"
          },
          "mode": {
            "default": "hybrid",
            "enum": [
              "keyword",
              "hybrid",
              "semantic"
            ],
            "type": "string"
          },
          "offset": {
            "default": 0,
            "type": "integer"
          },
          "q": {
            "description": "A search query (AgoraEx.SearchQuery), the same grammar on every search endpoint and MCP search verb. Words, `\"exact phrase\"`, `+require`, `-exclude`, `OR` in upper case between two words (lower-case and/or/not are ignored), and these operators, each negatable with a leading `-`: `link:<url glob>` (documents linking to a URL; see /api/v2/links), `site:<docs|wiki|mail|commits|commitfest|list|repo|host>`, `after:`/`before:` (YYYY, YYYY-MM, YYYY-MM-DD or YYYY/MM/DD; after: inclusive, before: exclusive), `d:A..B` / `date:A` (a range of the same forms), `intitle:`/`s:`/`subject:` (subject, title, a commit's first line), `intext:`/`b:`/`body:` (body only), `inurl:` (the document's own path or Message-ID), `from:`/`author:`/`f:` (sender, commit author, wiki editor), `to:`/`cc:` (mail), `filetype:`/`ext:` (mail attachments by extension), `has:patch`/`has:attachment` (mail), `commitfest:`/`cf:` (this, next, a name such as PG20-3 or a number) and `release:` (this, next, PG20): commitfest entries the commit model estimates for that commitfest or release, `case:yes` (case-sensitive regexes), `AROUND(n)` (matched as AND), and `/regex/` (PostgreSQL ARE, newline-sensitive, case-insensitive by default; `\\/` escapes a slash; `s:/re/`, `from:/re/`, `b:/re/` scope it). `related:` and `define:` are read by the /search page. An unknown `word:` is an ordinary word. A source an operator does not apply to returns no results with a `skipped` reason.\n",
            "examples": [
              "vacuum after:2024 site:pgsql-hackers",
              "link:*://example.org",
              "subject:/^\\[PATCH/ from:jane"
            ],
            "maxLength": 500,
            "type": "string"
          },
          "sort": {
            "default": "relevance",
            "enum": [
              "relevance",
              "latest",
              "oldest",
              "power"
            ],
            "type": "string"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "name": "mail_search",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "mail"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/mail/search"
      }
    },
    {
      "description": "What this server knows and which tool reads it: every kind of fact (person, membership, roster, commitfest entry, feature, decision, position, ...) with its attributes, value types, cardinality, docs and counts, and which kinds refer to which; the design-history graph's relations (thread DISCUSSES feature, decision DECIDES feature, person HOLDS position ABOUT feature, ...), sources (git, commitfest, rule, operator, model) and confidence rules (shown at 0.8 and above, \"probably\" from 0.5, hidden below; models capped at 0.9); the tables the tools read; and what is loaded (commits, tags, entries). Call it first to learn what can be asked. No arguments.",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "ontology",
      "outputs": {
        "properties": {
          "about": {
            "type": "string"
          },
          "graph": {
            "properties": {
              "confidence": {
                "type": "object"
              },
              "counts": {
                "type": "object"
              },
              "relations": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "sources": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "status_rule": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "kinds": {
            "items": {
              "properties": {
                "attributes": {
                  "items": {
                    "properties": {
                      "cardinality": {
                        "enum": [
                          "one",
                          "many"
                        ],
                        "type": "string"
                      },
                      "count": {
                        "type": "integer"
                      },
                      "doc": {
                        "type": "string"
                      },
                      "ident": {
                        "example": ":feature/status",
                        "type": "string"
                      },
                      "points_to": {
                        "items": {
                          "properties": {
                            "count": {
                              "type": "integer"
                            },
                            "kind": {
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "type": {
                        "enum": [
                          "ref",
                          "boolean",
                          "instant",
                          "long",
                          "double",
                          "string",
                          "keyword",
                          "uuid",
                          "bytes"
                        ],
                        "type": "string"
                      },
                      "unique": {
                        "enum": [
                          "identity",
                          "value"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "entities": {
                  "type": "integer"
                },
                "key": {
                  "example": ":feature/key",
                  "nullable": true,
                  "type": "string"
                },
                "kind": {
                  "example": "feature",
                  "type": "string"
                },
                "read_by": {
                  "example": [
                    "cross_reference"
                  ],
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "loaded": {
            "type": "object"
          },
          "tables": {
            "items": {
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "about",
          "kinds",
          "graph",
          "tables",
          "loaded"
        ],
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/ontology"
      }
    },
    {
      "description": "What relates to one stored item, and what happened to it. ref: a Message-ID or message URL, a commit SHA or URL, a docs URL or page.html, a wiki URL or title, a commitfest URL, CVE-YYYY-NNNNN, or feature:<words> (matched to commitfest titles and to the subjects of the postgres commits that introduce it; ref.entries_used and ref.commits_used say which; a name nothing matches gives empty results, not an error). Returns related threads, commits (with releases and reverted_by), docs, wiki pages, commitfest entries and people, each with why, strongest first: explicit links, shared identifiers, then similar topic. For a postgres commit, thread, entry or feature, timeline says which release shipped it and whether it was reverted or back-patched: status plus dated events (first post, commitfest listings, commits with branch and first release, reverts), each with its source url. kinds narrows; limit_per_kind (default 5, max 25). ~3 s budget: late parts go in timed_out. For feature:<words> and commitfest entries, graph lists the stored design-history features (status, the one release it shipped in, decisions, positions), each fact with confidence, source and evidence; \"probably\" below 0.8, facts below 0.5 left out.",
      "inputs": {
        "properties": {
          "kinds": {
            "description": "Comma-separated subset of mail,git,docs,wiki,commitfest,people (default all).",
            "type": "string"
          },
          "limit": {
            "default": 5,
            "description": "Items per kind.",
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "ref": {
            "description": "A Message-ID or message URL (pg.ddx.io/m/, postgr.es/m/, www.postgresql.org/message-id/), a commit SHA (7-40 hex), `repo@sha` or commit URL (pg.ddx.io gitweb, git.postgresql.org, github.com/postgres/postgres), a docs URL, `/docs/<ver>/<page>.html` or `<page>.html`, a wiki URL or page title, a commitfest URL, `CVE-YYYY-NNNNN`, or `feature:<words>` (a feature name matched to commitfest entry titles and to the subjects of the postgres commits that introduce it; `ref.entries_used` and `ref.commits_used` list what was read, `ref.entries_not_used` the other candidates; a name nothing matches returns empty results).",
            "type": "string"
          },
          "timeline": {
            "default": "true",
            "description": "Include the timeline.",
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          },
          "version": {
            "default": "current",
            "description": "Docs version for a page given without one, e.g. 17.",
            "type": "string"
          }
        },
        "required": [
          "ref"
        ],
        "type": "object"
      },
      "name": "related",
      "outputs": {
        "properties": {
          "graph": {
            "description": "For `feature:<words>` and commitfest entries: the stored design-history features (best first, at most 5), each fact with `confidence`, `source` and `evidence`. Absent when none match.\n",
            "items": {
              "description": "A feature of the design-history graph: commitfest entries that share a thread, the commits whose Discussion: names them, its status (folded from commitfest and git evidence by date) and the one major release it shipped in. Status, release and their provenance are left out when the status's confidence is below 0.5 (`hidden` counts the facts left out).\n",
              "properties": {
                "as_of": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "cf_entries": {
                  "items": {
                    "type": "integer"
                  },
                  "type": "array"
                },
                "commits": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "confidence": {
                  "type": "number"
                },
                "decisions": {
                  "items": {
                    "allOf": [
                      {
                        "properties": {
                          "confidence": {
                            "maximum": 1,
                            "minimum": 0,
                            "type": "number"
                          },
                          "evidence": {
                            "items": {
                              "description": "{sha}, {revert, of}, {cf, commitfest, status} or {mid, quote}",
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "key": {
                            "type": "string"
                          },
                          "source": {
                            "enum": [
                              "git",
                              "commitfest",
                              "rule",
                              "operator",
                              "model"
                            ],
                            "type": "string"
                          },
                          "wording": {
                            "description": "certain at 0.8 and above, probably from 0.5; facts below 0.5 are left out",
                            "enum": [
                              "certain",
                              "probably"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      {
                        "properties": {
                          "at": {
                            "format": "date-time",
                            "nullable": true,
                            "type": "string"
                          },
                          "outcome": {
                            "enum": [
                              "reverted",
                              "rejected",
                              "chosen",
                              "postponed",
                              "required"
                            ],
                            "type": "string"
                          },
                          "summary": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "evidence": {
                  "items": {
                    "type": "object"
                  },
                  "type": "array"
                },
                "hidden": {
                  "type": "integer"
                },
                "key": {
                  "example": "cf/1473",
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "positions": {
                  "items": {
                    "allOf": [
                      {
                        "properties": {
                          "confidence": {
                            "maximum": 1,
                            "minimum": 0,
                            "type": "number"
                          },
                          "evidence": {
                            "items": {
                              "description": "{sha}, {revert, of}, {cf, commitfest, status} or {mid, quote}",
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "key": {
                            "type": "string"
                          },
                          "source": {
                            "enum": [
                              "git",
                              "commitfest",
                              "rule",
                              "operator",
                              "model"
                            ],
                            "type": "string"
                          },
                          "wording": {
                            "description": "certain at 0.8 and above, probably from 0.5; facts below 0.5 are left out",
                            "enum": [
                              "certain",
                              "probably"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      {
                        "properties": {
                          "person": {
                            "type": "string"
                          },
                          "stance": {
                            "enum": [
                              "proposes",
                              "supports",
                              "opposes",
                              "concerned",
                              "neutral",
                              "reviews"
                            ],
                            "type": "string"
                          },
                          "summary": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "release": {
                  "example": "17",
                  "nullable": true,
                  "type": "string"
                },
                "release_commit": {
                  "nullable": true,
                  "type": "string"
                },
                "release_tag": {
                  "example": "REL_17_0",
                  "nullable": true,
                  "type": "string"
                },
                "rule": {
                  "example": "reland",
                  "type": "string"
                },
                "says": {
                  "example": "SQL/JSON: JSON_TABLE: probably committed, released in PostgreSQL 17",
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "source": {
                  "type": "string"
                },
                "status": {
                  "enum": [
                    "proposed",
                    "in-progress",
                    "committed",
                    "reverted",
                    "rejected",
                    "returned",
                    "withdrawn"
                  ],
                  "type": "string"
                },
                "status_at": {
                  "format": "date-time",
                  "nullable": true,
                  "type": "string"
                },
                "subsystems": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "threads": {
                  "items": {
                    "properties": {
                      "message_id": {
                        "nullable": true,
                        "type": "string"
                      },
                      "url": {
                        "nullable": true,
                        "type": "string"
                      },
                      "withheld": {
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "wording": {
                  "enum": [
                    "certain",
                    "probably"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "partial": {
            "type": "boolean"
          },
          "ref": {
            "properties": {
              "date": {
                "format": "date-time",
                "nullable": true,
                "type": "string"
              },
              "key": {
                "description": "Message-ID, SHA, docs path, wiki title, commitfest id or CVE id"
              },
              "kind": {
                "enum": [
                  "mail",
                  "git",
                  "docs",
                  "wiki",
                  "commitfest",
                  "cve",
                  "feature"
                ],
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "related": {
            "additionalProperties": {
              "items": {
                "properties": {
                  "date": {
                    "format": "date-time",
                    "nullable": true,
                    "type": "string"
                  },
                  "evidence": {
                    "type": "string"
                  },
                  "relations": {
                    "example": [
                      "discussion-trailer",
                      "similar topic"
                    ],
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "releases": {
                    "description": "postgres commits: per branch the change landed on",
                    "items": {
                      "description": "One branch a change landed on. `release` is the first final release tag on that branch containing the commit (computed from tag ancestry), null when none does yet; `first_version` counts betas and release candidates. `shipped` is false when the change was reverted on that branch before the release that first contains the revert.\n",
                      "properties": {
                        "branch": {
                          "example": "REL_14_STABLE",
                          "type": "string"
                        },
                        "committed_at": {
                          "format": "date-time",
                          "type": "string"
                        },
                        "first_tag": {
                          "example": "REL_14_23",
                          "nullable": true,
                          "type": "string"
                        },
                        "first_version": {
                          "example": "19beta1",
                          "nullable": true,
                          "type": "string"
                        },
                        "major": {
                          "example": "14",
                          "nullable": true,
                          "type": "string"
                        },
                        "release": {
                          "example": "14.23",
                          "nullable": true,
                          "type": "string"
                        },
                        "removed_in": {
                          "nullable": true,
                          "type": "string"
                        },
                        "reverted_by": {
                          "nullable": true,
                          "type": "string"
                        },
                        "sha": {
                          "type": "string"
                        },
                        "shipped": {
                          "type": "boolean"
                        },
                        "tag": {
                          "example": "REL_14_23",
                          "nullable": true,
                          "type": "string"
                        },
                        "tagged_at": {
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "reverted_by": {
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "score": {
                    "description": "1.0 explicit link, 0.7 shared identifier, below 0.6 similar topic",
                    "type": "number"
                  },
                  "title": {
                    "type": "string"
                  },
                  "url": {
                    "nullable": true,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "type": "array"
            },
            "description": "One array per requested kind (mail, git, docs, wiki, commitfest, people).",
            "type": "object"
          },
          "timed_out": {
            "description": "Kinds (or \"timeline\") that ran out of time.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "timeline": {
            "description": "What happened to a change, from git tags, commit messages and the commitfest only. `status.state` is `committed` (with `released_in`), `committed, unreleased`, `reverted`, else the latest commitfest status, else `unknown`; `status.evidence` lists the commits or entry it rests on.\n",
            "properties": {
              "events": {
                "items": {
                  "properties": {
                    "branch": {
                      "type": "string"
                    },
                    "date": {
                      "nullable": true,
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "first_post",
                        "commitfest",
                        "commit",
                        "backpatch",
                        "revert"
                      ],
                      "type": "string"
                    },
                    "release": {
                      "nullable": true,
                      "type": "string"
                    },
                    "sha": {
                      "type": "string"
                    },
                    "source": {
                      "description": "Message, commit or commitfest URL the event was read from",
                      "type": "string"
                    },
                    "what": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "kind",
                    "date",
                    "what",
                    "source"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "sources": {
                "properties": {
                  "commitfest_entries": {
                    "items": {
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "commits": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "commits_cut": {
                    "description": "More than 40 commits: only the newest 40 are listed",
                    "type": "boolean"
                  },
                  "threads": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "status": {
                "properties": {
                  "evidence": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "released_in": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "state": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "took_ms": {
            "type": "integer"
          }
        },
        "required": [
          "ref",
          "related",
          "partial",
          "timed_out",
          "took_ms"
        ],
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/related"
      }
    },
    {
      "description": "List indexed source repositories\n\nEvery repository whose git history + code is indexed.",
      "inputs": {
        "properties": {},
        "type": "object"
      },
      "name": "repos",
      "outputs": {
        "properties": {
          "repos": {
            "items": {
              "properties": {
                "branch": {
                  "type": "string"
                },
                "commit_count": {
                  "type": "integer"
                },
                "description": {
                  "type": "string"
                },
                "file_count": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "tags": [
        "git"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/repos"
      }
    },
    {
      "description": "Search / list commits in a repository",
      "inputs": {
        "properties": {
          "author": {
            "description": "Substring of the author name or email (case-insensitive).",
            "type": "string"
          },
          "limit": {
            "default": 50,
            "maximum": 200,
            "type": "integer"
          },
          "name": {
            "description": "Repository name (e.g. postgres).",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "type": "integer"
          },
          "q": {
            "description": "Full-text query over commit messages (pg_fts). Every word must appear; -word excludes, \"a phrase\" is adjacent, OR (upper case) joins the words beside it, and/or/not in lower case are ignored. With the search operators (after:/before:/d: for dates, author:/from:, intitle: = first line, /regex/ with at least one word, link:, site:<repo>) and trailer:Key=Value. Dates, paths and branches are not separate parameters: since=, until=, path= and branch= are not read (use after:/before: in q; the any-version index /api/v2/code/history/commits takes paths and a range).",
            "examples": [
              "vacuum after:2024 site:pgsql-hackers",
              "link:*://example.org",
              "subject:/^\\[PATCH/ from:jane"
            ],
            "maxLength": 500,
            "type": "string"
          },
          "sort": {
            "default": "latest",
            "description": "relevance ranks a query of plain words by BM25, best match first; with author, trailer or an operator the order stays newest first.",
            "enum": [
              "latest",
              "relevance"
            ],
            "type": "string"
          },
          "trailer": {
            "description": "Key=Value or Key: a commit trailer line, as trailer: in q.",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "repos_commits",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "git"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/repos/{name}/commits"
      }
    },
    {
      "description": "One commit's metadata + diff",
      "inputs": {
        "properties": {
          "name": {
            "type": "string"
          },
          "sha": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "sha"
        ],
        "type": "object"
      },
      "name": "repos_commits_by_sha",
      "outputs": {
        "type": "object"
      },
      "tags": [
        "git"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/repos/{name}/commits/{sha}"
      }
    },
    {
      "description": "PostgreSQL wiki search\n\nFull-text search (websearch syntax) over wiki.postgresql.org. By default only each page's current text is searched. With `history=1` every revision is (optionally within `since`..`until`), and each page is one result: its latest matching revision (`rev_id`, `revision_url`, `is_current`) and `matching_revisions`, the number that matched.",
      "inputs": {
        "properties": {
          "history": {
            "default": "0",
            "enum": [
              "0",
              "1"
            ],
            "type": "string"
          },
          "limit": {
            "default": 20,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "maximum": 10000,
            "type": "integer"
          },
          "q": {
            "description": "Words and search operators. A source the operators exclude returns no results and a skipped reason; docs with after:/before: and no versions= search the versions current then.",
            "examples": [
              "vacuum after:2024 site:pgsql-hackers",
              "link:*://example.org",
              "subject:/^\\[PATCH/ from:jane"
            ],
            "maxLength": 500,
            "type": "string"
          },
          "since": {
            "description": "history=1 only: YYYY-MM-DD or ISO-8601 date-time, inclusive.",
            "type": "string"
          },
          "until": {
            "description": "history=1 only: a date includes that whole day.",
            "type": "string"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "name": "wiki_search",
      "outputs": {
        "properties": {
          "history": {
            "type": "boolean"
          },
          "query": {
            "type": "string"
          },
          "results": {
            "items": {
              "properties": {
                "author": {
                  "type": "string"
                },
                "comment": {
                  "type": "string"
                },
                "is_current": {
                  "type": "boolean"
                },
                "matching_revisions": {
                  "type": "integer"
                },
                "rev_id": {
                  "type": "integer"
                },
                "revision_url": {
                  "description": "history=1: https://wiki.postgresql.org/index.php?oldid=<rev_id>",
                  "type": "string"
                },
                "score": {
                  "type": "number"
                },
                "snippet": {
                  "type": "string"
                },
                "snippet_html": {
                  "type": "string"
                },
                "timestamp": {
                  "format": "date-time",
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "url": {
                  "description": "https://wiki.postgresql.org/wiki/<Title>",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "total": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "tags": [
        "search"
      ],
      "tool_call_template": {
        "call_template_type": "http",
        "http_method": "GET",
        "url": "https://pg.ddx.io/api/v2/wiki/search"
      }
    }
  ],
  "utcp_version": "1.1.0"
}
