Skip to main content
Glama

Propose a Wikidata correction

propose_wikidata_correction
Idempotent

Propose a correction to a Wikidata statement (Console → Wikidata → Review), for an administrator to approve and make. The item may be one no entry links (an event, say, which VH has no entry for): every statement on it is then read live, as one outside the catalog is, its card on Review says “Item not on VH”, and it takes any change but a deprecation or a merge (refused 422 qid_not_linked). It is filed as curated by your account and this key, and only proposes: nothing is written to Wikidata, and this server cannot approve or make an edit. Trusted editors and administrators may; a trusted editor’s account files at most 200 a day (UTC), all its keys together. set_value / remove / move one statement (its GUID, and the value you saw) on any property, P31 included — on one outside the catalog the site reads the statement live, the new value is as value below takes it, and a move is only between two properties of one datatype — or merge two items; evidence.why is required, and evidence.summary is the edit summary you would like (never naming this site). The kind says why: superseded (the subject renamed, or a newer value), duplicate (a duplicate statement), update (anything else you curate), or one of the format kinds. Or deprecate a value: the property and the value, a reason (an item id: one of the suggested reasons, else an instance of "reason for deprecated rank" on the write wiki) and an optional source page that says why, which the site loads itself (https, a public address); the site finds the statement and writes the evidence. Two kinds: suppressed, a value an editor took off VH that Wikidata still states (Console → Wikidata → To judge), whose evidence is that removal, so it takes none from you and is refused (not_suppressed) while VH still lists the value; or dead_account, an account the platform itself shows deleted, suspended or terminated, on a property of the platform catalog (property_not_allowed otherwise), whether or not VH still lists it, with evidence.why required (what the platform shows) and evidence.summary optional; or wrong_subject, a value two items state where they say they are two subjects (Console → Wikidata → To judge, “One account on two subjects”, which list_wikidata_wrong_subject_pairs reads), deprecated on qid, the item it does not belong to, with belongs_to the item it belongs to: filed whether or not VH still lists it, only while both items state it and the site’s identity check still says they are two subjects (both read live, and again just before it is made), on a property of the platform catalog, with the reason the site picks (reason may be left out: “refers to different person”, Q35773207, on a human, else “refers to different subject”, Q28091153; another is refused wrong_reason) and evidence it writes itself (refused pair_not_refused, value_not_shared or item_gone, each with a message, when that no longer holds). set_rank deprecated (below) is held to the same rules. When an entry linking the item still shows the value, both dry runs and the answer say so ("Still listed on VH entry (…): …", still_listed, each handle with kept_by). What VH then does with it: a handle the Wikidata sync keeps (kept_by "wikidata") is taken off the entry by the sync once Wikidata ranks the statement deprecated and the handle-removal grace is out (sync_state → settings.handles: its hours and consecutive fetches, and the blanking guard); a handle a person keeps the sync never takes off, so take it off with update_entry_handles if the account is gone. Or change the item’s terms in one language (a Wikimedia language code; mul for a label or aliases, never a description), kind superseded, duplicate or update: set_label / set_description with value_seen the term as you read it (null when the item has none in that language) and new_value the new text, at most 250 characters ("" removes it); set_aliases with value_seen the aliases as you read them ([] for none) and add and/or remove lists. It is made only while the term is still what you read. Or add a statement on any property (add_claim, kind superseded or update): property and value — a string (text, an identifier, a web address, an item id, a Commons file), {"text","language"} for a monolingual text, "YYYY-MM-DD", "YYYY-MM" or "YYYY" for a date, or an amount or {"amount","unit"} (unit an item id) for a quantity, either with "lowerBound" and "upperBound" for its range (both or neither, the amount between them; e.g. {"amount":"17000","lowerBound":"17000","upperBound":"17099"} for a count shown rounded down as "17K") — with optional qualifiers ([{"property","value"}], the same kinds of value, or {"unknown": true} for a time of unknown value, as add_qualifier takes one), and a REQUIRED reference (but on a Commons file, an image, a logo or a coat of arms, which is documented on Commons and goes without one; a Commons file page is never a reference): {"url" (https; the site loads it; never a Wikimedia project’s page, wikidata.org and its old revisions included, which is refused with why: wikimedia_reference; Verified Handles’ own page, this site’s or verifiedhandles.org’s, an archive copy’s included, is filed with the warning own_site_reference: keep it only where Verified Handles is genuinely the source, else cite the page the subject published), and/or "stated_in" (an item id, P248 “stated in”: the work or database the claim is made in, for a source with no stable page of its own, such as YouTube, Q866), and/or "identifier" ({"property", "value"}: an external identifier in that work, such as P244 no97057848 beside stated_in Q13219454, Library of Congress Authorities, for a record with no page the site can load; refused bad_reference when the property is not an external identifier, format_mismatch when the value fails its format), "retrieved" (YYYY-MM-DD, not after today; today if left out), "title" (optional; else the page’s own), "language" (optional, an item id: the language of the work), "archive_url" (optional: a web archive’s https copy of "url", P1065 archive URL, which the site loads instead of the original, so a page that is gone, http or https, can still be cited) and "archive_date" (optional, YYYY-MM-DD, P2960: the day it was archived, read from a web.archive.org or archive.today address when left out)}; the dry run shows the reference as the write wiki will get it (reference_snaks). The site reads each property’s datatype on the write wiki and refuses one it cannot write (datatype_unsupported); an identifier of digits alone may be sent as a JSON number and is filed as its digits, but only up to 9007199254740991: past it (a 64-bit id, such as a Discord server ID) JSON has already rounded it, so it is refused with a message saying to send it as a string; a text or identifier value (add_claim, supersede, set_value) that fails the property’s format constraint (P1793, read on the write wiki) is refused (format_mismatch, with pattern). Or add a reference to a statement (add_reference: property, statement_guid, optionally value_seen, and reference), or replace one of its references (replace_reference: also reference_hash, the hash of the one it replaces); each is made only while the statement, and the reference replaced, are still as you read them. Or change a statement’s qualifiers or rank (property, statement_guid, optionally value_seen): add_qualifier with qualifier {"property","value"} (any property, the same kinds of value: a dated start, end or point in time included, or {"unknown": true} for a time of unknown value — an end time no source dates, sent as Wikidata’s “unknown value”), change_qualifier with qualifier and qualifier_hash (the one it replaces), remove_qualifier with qualifier_hash; set_rank with rank preferred, normal or deprecated (deprecated needs a reason, checked as a deprecation’s is, and shows the same "Still listed" line). A preferred rank (set_rank, or add_claim with rank: "preferred") outranks the property’s normal values, so Wikidata stops counting them as current: when it would, the site names them ("Makes not current: …", makes_not_current) and refuses it (rank_choice_required) until you choose outranked: "end_date" end-dates each on end_date (YYYY-MM-DD, YYYY-MM or YYYY, not after today, or {"unknown": true}), filed as steps before it in one group; "keep_normal" makes it preferred and leaves them normal with no end time, for a value still true but less precise (Help:Ranking: a city of birth, Houston, preferred beside its country, United States, left normal); or "leave_normal" leaves them current and sets no preferred rank. A series of point-in-time values (a follower count P8687, a population, a revenue: each with a point in time, P585, and no start or end time; or a software version P348, each release with its publication date, P577, and no start or end time) is the exception: the newer value takes the preferred rank and the older ones stay normal with no end time, as Wikidata’s convention for such a series has it, without a choice (the dry run still names them in makes_not_current); an older value of the same account (the same identifier qualifier: P6552, P4033…), or an older release, that is preferred itself goes to normal too, a set_rank step after it, with its “most recent value” (P7452 Q71533355) removed first, and is named there as well — another account’s preferred count is left alone; "point_in_time" asks for that by name, and is refused (not_point_in_time) when one of them is not such a value. Or file the superseded bundle (action supersede, kind superseded): the statement you name end-dated on date, and a new statement of value on the same property at preferred rank with a start time of date (date {"unknown": true}: an end time of unknown value, and no start time), optional qualifiers and a REQUIRED reference, two steps of one group made in order (outranked / end_date for any other value it would outrank). A rebrand’s new logo is that bundle on the logo image property (P154 on www.wikidata.org; test.wikidata.org’s own is P95469) with value a Commons file name, found with search_commons_images: a file not on Commons is refused (file_not_found, “No logo on Commons yet: upload it there first, then propose it here.”, with Commons’ upload_url) and nothing is filed. Each is made only while the statement, its qualifiers and its rank are as you read them. Or move a statement to another item (move_to_item), or copy it there (copy_to_item; the same, leaving it where it is), kind superseded, duplicate or update: qid, property, statement_guid and value_seen name the statement, other_qid the item it goes to (never the same one). The site reads it live and files, on that item, a new statement with its whole value (a quantity’s range included), its qualifiers and its references exactly as read (kept as evidence.references_before), at normal rank; a move adds the removal of the statement, two steps of one group made in order, the removal only once the copy is made and only while the statement is still exactly as read. A reference that cites a Wikimedia page is never copied: the statement is refused (wikimedia_reference, naming those references by hash) unless you give a reference (an addition’s shape) to take its place; one given anyway is added after those read. Refused when that item already states the value (already_listed, a quantity inside a range stated included) or a proposal to add it is open (already_proposed). The dry run shows each step and the whole new statement as the write wiki will get it (statement). A proposal on a statement that already has an open correction of the same thing (the value, the rank, the same qualifier property, the same reference), or the site’s own suggestion, takes its place: the dry run names each one (replaces, their ids, and a line in warning, "Replaces #772 (dead_account, deprecate, reason Q1193907)."), and the answer gives the row it filed (ids) and those it replaced (replaced). A person’s open correction of the same change (the same statement, action, value and new property) is taken in as it stands only when it writes the same thing: the whole value, its qualifiers and rank, and the same reference (the day retrieved aside); the dry run names it (adopts, “Takes in the open change #3329 (…)”) and nothing new is filed for it. One that writes it otherwise (another reference, qualifier or rank) refuses the proposal (409 already_proposed, with its id, a group’s step and a message), dry run or not, and nothing is filed: leave the change out, or have that row dismissed first. A reference cited by a web archive’s copy and one cited by the original with that copy as its archive_url are the same reference. One beside a person’s open change to something else on the statement (another qualifier, a reference, the value beside a qualifier) closes nothing: it is joined to that open change as its next step, one group made in that order and one card on Review (the dry run’s joins, the answer’s joined and group_id, and a line in warning, "Joined to the open change #4364 (…) as its next step: one proposal, made in that order."; where the open change sets the value, the line says this one, checked against the old value, stops once that one is made and wants proposing again then). To withdraw a correction without filing one in its place, use dismiss_wikidata_correction. A change a person dismissed is not filed again while Wikidata says the same thing: the same kind and action on the same statement, with the same value seen, new value and new property and the whole value written (a quantity’s range, a new statement’s qualifiers and rank) and the same reference (the day retrieved aside), is refused (409 dismissed, the dry run included, with dismissed_id, dismissed_at and a message); send it again with refile: true to file it anyway (its evidence and the audit name the dismissed row). Any other change on that statement is filed as usual, so a dismissed row with the wrong reason, or a weak reference, is corrected by proposing the right one. Audited. Dry run by default: a deprecation’s, a term’s, a statement’s, a reference’s, a qualifier’s or a rank’s dry run has the site check it all and show what it would file (each step of a group, and the rank warning, included). The owner’s Wikidata conventions are checked as it is filed (each refusal’s message says what is wrong and its suggestion exactly what to change, and nothing is filed). Refused: a new YouTube channel ID statement (P2397) without its title as a “subject named as” (P1810) qualifier (channel_without_title); a YouTube handle (P11245) whose P2397 qualifier names a channel the item does not state and no earlier change of the proposal adds (handle_without_channel); a reference whose url is a web archive’s copy (web.archive.org, archive.today: archive_as_reference; give the original page as the url and the copy as archive_url); an add_claim whose value, and each qualifier it gives, the item states already (claim_already_present: add the reference to that statement instead, add_reference with its GUID); a set_value of a Bluesky handle (P12361) on a statement with no Bluesky DID (P12409) when the proposal adds none (bluesky_handle_without_did: add it with an add_qualifier in the same group); kind superseded filed as a set_value, which writes over a value that was true once (superseded_in_place: propose the supersede bundle, the old value ended and the new one added). Filed with a warning instead (warnings, each with its code, step, message and suggestion, and in warning; kept on the row for the reviewer): a YouTube count whose range is centred on its amount where YouTube rounds down (range_not_rounded_down: “1.42M” is 1420000 to 1429999); a YouTube count whose range starts at its amount but is wider than YouTube’s rounding to three significant figures (range_too_wide: “1.7M” is 1700000 to 1709999, not to 1799999); a round count on a platform that shows counts rounded (YouTube, TikTok, Instagram, Snapchat, X) filed as exact (rounded_count_exact: “399.1K” is 399100 to 399199); a new count at normal rank that is its account’s newest, where the item keeps each account’s newest count preferred or has none preferred (count_not_preferred); a preferred follower count that makes another account’s newest count not current (preferred_outranks_other_accounts); a new preferred count while an older count of the same account stays preferred, on the item or by another open proposal, which it names (same_account_still_preferred); a preferred count demoted with no newer one for its account in the proposal (depends_on_other_proposal: propose the two together); an account deprecated beside its successor, which wants an end time instead (replacement_deprecated); a start or end time (P580, P582) on the day it is proposed or its reference retrieved, which no source dates (made_up_date: Wikidata wants an end time of unknown value, {"unknown": true}, unless a source dates it); a reference stated in (P248) an item that is not the platform of the account it supports, or stated in a platform’s item (the YouTube API, Q8056784) for an identifier that is none of that platform’s, such as an Apple Music artist ID linked from a video (stated_in_mismatch, on www.wikidata.org: cite the page you read it on); a second value at normal rank of a single-best-value property (P2013, P7085, P19…) beside another normal one and none preferred (single_best_second_normal, on www.wikidata.org); an account statement that carries a reference, removed (remove_with_reference: deprecate another person’s account with reason Q35773207 instead, so no import adds it again); aliases added in one language that are the item’s default (mul) aliases already (alias_duplicates_mul); a reference titled with a platform’s own page title, such as “TikTok - Make Your Day” (generic_reference_title); a dead account deprecated while the item states another current value of its property (other_current_values), and a value deprecated as “changed username”, “redirect” or “cannot be confirmed by other sources” while the item or a VH entry on it holds another value of its property (outdated_not_wrong): each was right once, so end it (P582) rather than deprecate it; a new YouTube handle (P11245) that is not, case aside, the handle this site’s handle checker last saw its P2397 channel with (handle_differs_from_channel: the handle is what YouTube shows after the @, not the channel’s title); and a point in time, start or end time added to an award (P166) or nomination (P1411) statement that has one with another value already (second_date_on_statement: each year is a statement of its own; www.wikidata.org); a reference that is Verified Handles’ own page, this site’s or verifiedhandles.org’s (own_site_reference: keep it only where Verified Handles is genuinely the source); a reference on an account or official website (P856) statement whose url is a social profile page, read by the platform catalog’s templates: the account itself, such as an X username cited by its x.com page or a YouTube channel by its own page or /about tab, or another profile cited as the source, such as a YouTube /about page for an X or Instagram account or the website (profile_reference: cite a page independent of the account, the official website or a news article; a post, a video and any other page are never warned); and a new TikTok, Instagram, Threads, Twitch or X account statement (P7085, P2003, P11892, P5797, P2002) with no “subject named as” (P1810) qualifier (missing_display_name: add the account’s display name as the platform shows it); and a duplicate removed (kind duplicate) whose value has capitals, on a platform that ignores letter case (X, Instagram, TikTok, Threads, a YouTube handle, Twitch, Kick, GitHub, Reddit, Facebook), while the copy the item keeps is all lower case (removes_cased_copy: the casing the account shows is the copy to keep, so remove the lowercase one instead, its references and qualifiers moved onto the other first, unless the account really is all lower case); and an account deprecated (set_rank deprecated, or a deprecation) as not the subject’s (“refers to different person”, “refers to different subject”, “incorrect value”, “incorrect identifier value” or “conflation”) while follower counts of it (P8687 qualified with one of its identifiers: P6552 or P2002 on X, P2397 or P11245 on YouTube…) stay current on the item, or such a count deprecated while its account stays current (account_counts_apart, naming them, and any open proposal that deprecates one of them apart: they stand or fall together, so propose the account’s set_rank deprecated and each count’s in one propose_wikidata_changes call, which takes those open proposals into its group). An official website (P856; test.wikidata.org’s P206) a proposal adds or changes, and each of the item’s other official websites with no language of work or name (P407; test.wikidata.org’s P77090), gets a step of its own after the proposal’s, adding the language its page declares (its , else its Content-Language header; en-US is English, Q1860), made as an edit of its own once the statement exists; a page that declares no language, several, or one with no item, or that does not load, gets no step, and nothing is guessed. The dry run and the answer name each (website_languages: the step, the language and what the page declared, or left_out with a message), and a reviewer may untick any. A statement the proposal gives a P407 itself is left as given.

Input Schema

NameRequiredDescriptionDefault
addNoset_aliases: the aliases to add.
qidYes
dateNosupersede (required): the day (or month, or year) the old value ended and the new one began; {"unknown": true} when no source dates it: the old one gets an end time of unknown value, and the new one no start time. A supersede takes `property`, `statement_guid`, `value`, `date` and `reference` (and optionally `qualifiers`), never `new_value`.
kindYes`merge` with a merge, `suppressed`, `dead_account` or `wrong_subject` with a deprecation; `superseded`, `duplicate` or `update` for a change you curate; `supersede` takes `superseded` only (a renamed account is one). The format kinds (`pasted_address`, `renamed_account`…) go with set_value, remove or move.
rankNoset_rank: the rank; add_claim: "preferred" for the new statement (default normal).
valueNoadd_claim, supersede: the new statement’s value, as its property’s datatype takes it.
actionYes
reasonNodeprecate, set_rank deprecated: the reason for the deprecated rank, an item id (e.g. Q113360982 "unavailable account"). Optional for kind wrong_subject, whose reason the site picks.
refileNoFile it even though a person dismissed this same change before (refused 409 `dismissed` otherwise).
removeNoset_aliases: the aliases to take off.
sourceNodeprecate: an https page that says why (a news article, say). The site loads it and cites its title and date.
dry_runNotrue (the default): write nothing — show the change and the exact request it would send. false: make the change.
end_dateNoWith outranked "end_date" only: the day, month or year the OTHER values it outranks ended, or {"unknown": true} for an end time of unknown value (supersede: `date` unless given). Never the superseded value’s own end, which is `date`.
evidenceNoRequired, except for a deprecation of kind `suppressed` or `wrong_subject`, whose evidence the site writes.
languageNoset_label, set_description, set_aliases: the language code, e.g. "en", "da", "mul".
propertyNoThe statement’s property (not for a merge).
new_valueNoset_value and move: the new value (on a property outside the catalog, as `value` takes it; a move’s may be left out there, to move the value as it is); set_label and set_description: the new text, "" to remove the term.
other_qidNomerge: the item it duplicates; move_to_item, copy_to_item: the item the statement goes to.
outrankedNoA preferred rank that would make other values not current: "end_date" end-dates them, "leave_normal" sets no preferred rank, "keep_normal" makes it preferred and leaves them normal with no end time, still true but less precise (a city of birth, P19, beside its country), "point_in_time" leaves them normal with no end time (each must have a point in time, P585, or as a software version, P348, a publication date, P577, and no start or end time). Point-in-time values alone (a follower count with P585, a software version’s releases with P577) need no choice.
qualifierNoadd_qualifier, change_qualifier: the qualifier and its value; remove_qualifier: optionally its property.
referenceNoadd_claim, supersede, add_reference, replace_reference (required): the source. move_to_item, copy_to_item (optional): a reference the copy gets after those read, required when one of those cites a Wikimedia page.
belongs_toNoKind wrong_subject (required): the other item of the pair, the one the value belongs to.
qualifiersNoadd_claim, supersede: qualifiers on the new statement, each a property and a value; {"unknown": true} for a time of unknown value (an end time no source dates).
value_seenNoThe statement’s value as you read it. A label or description: the term as you read it, null for none. Aliases: the list as you read it, [] for none.
new_propertyNomove: the property it belongs under.
qualifier_hashNochange_qualifier, remove_qualifier: the hash of the qualifier on the statement.
reference_hashNoreplace_reference: the hash of the reference it replaces.
statement_guidNoThe statement’s id, e.g. "Q42$0a1b…" (not for a merge; optional for a deprecation, which the site finds by its value).

Output Schema

NameRequiredDescriptionDefault
noteNoA dry run: what to do next to make the change, in words.
resultNoA real run: the route’s own answer, where the tool adds facts of its own beside it.
confirmNoA dry run of a change that needs it: the exact target to send back as `confirm` with dry_run: false.
dry_runNotrue: a dry run, which wrote nothing. Absent from a real run.
replayedNoA real run with an idempotency_key already used for this change: the first call’s answer, given back; nothing was written now.
would_sendNoA dry run: the exact request the real run would send (`method`, `path`, any `headers` such as an Idempotency-Key, and its `body`, `form` or `query`), or the requests, in order.
may_edit_liveNoA dry run of a live edit: whether this key’s account may edit this entry live.
refused_becauseNoA dry run the real run would be refused for: why, in words.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / outranked / description
      Previous value: -"A preferred rank that would make other values not current: \"end_date\" end-dates them, \"leave_normal\" sets no preferred rank, \"point_in_time\" leaves them normal with no end time (each must have a point in time and no start or end time). Point-in-time values alone (a follower count with P585) need no choice."New value: +"A preferred rank that would make other values not current: \"end_date\" end-dates them, \"leave_normal\" sets no preferred rank, \"keep_normal\" makes it preferred and leaves them normal with no end time, still true but less precise (a city of birth, P19, beside its country), \"point_in_time\" leaves them normal with no end time (each must have a point in time, P585, or as a software version, P348, a publication date, P577, and no start or end time). Point-in-time values alone (a follower count with P585, a software version’s releases with P577) need no choice."
    • changedInput schema / properties / outranked / enum
      Previous value: -[
      -  "end_date",
      -  "leave_normal",
      -  "point_in_time"
      -]New value: +[
      +  "end_date",
      +  "leave_normal",
      +  "point_in_time",
      +  "keep_normal"
      +]
    • changedInput schema / properties / qualifiers / description
      Previous value: -"add_claim, supersede: qualifiers on the new statement, each a property and a value."New value: +"add_claim, supersede: qualifiers on the new statement, each a property and a value; {\"unknown\": true} for a time of unknown value (an end time no source dates)."
    • addedInput schema / properties / reference / properties / identifier
      Added value: +{
      +  "description": "An identifier in the work it is stated in: an external-id property and its value, e.g. {\"property\": \"P244\", \"value\": \"no97057848\"} beside stated_in Q13219454 (Library of Congress Authorities), for a record with no address the site can load. Written after stated_in.",
      +  "properties": {
      +    "property": {
      +      "pattern": "^P[1-9][0-9]*$",
      +      "type": "string"
      +    },
      +    "value": {
      +      "maxLength": 400,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "property",
      +    "value"
      +  ],
      +  "type": "object"
      +}
  2. Changed16 schema fields changed
    • addedInput schema / properties / belongs_to
      Added value: +{
      +  "description": "Kind wrong_subject (required): the other item of the pair, the one the value belongs to.",
      +  "pattern": "^Q[1-9][0-9]*$",
      +  "type": "string"
      +}
    • addedInput schema / properties / date / anyOf
      Added value: +[
      +  {
      +    "maxLength": 10,
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "unknown": {
      +        "const": true,
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "unknown"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / date / description
      Previous value: -"supersede: the day (or month, or year) the old value ended and the new one began."New value: +"supersede (required): the day (or month, or year) the old value ended and the new one began; {\"unknown\": true} when no source dates it: the old one gets an end time of unknown value, and the new one no start time. A supersede takes `property`, `statement_guid`, `value`, `date` and `reference` (and optionally `qualifiers`), never `new_value`."
    • removedInput schema / properties / date / maxLength
      Removed value: -10
    • removedInput schema / properties / date / type
      Removed value: -"string"
    • addedInput schema / properties / end_date / anyOf
      Added value: +[
      +  {
      +    "maxLength": 10,
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "unknown": {
      +        "const": true,
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "unknown"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / end_date / description
      Previous value: -"With outranked \"end_date\": the day, month or year they ended (supersede: `date` unless given)."New value: +"With outranked \"end_date\" only: the day, month or year the OTHER values it outranks ended, or {\"unknown\": true} for an end time of unknown value (supersede: `date` unless given). Never the superseded value’s own end, which is `date`."
    • removedInput schema / properties / end_date / maxLength
      Removed value: -10
    • removedInput schema / properties / end_date / type
      Removed value: -"string"
    • changedInput schema / properties / evidence / description
      Previous value: -"Required, except for a deprecation of kind `suppressed`, whose evidence the site writes."New value: +"Required, except for a deprecation of kind `suppressed` or `wrong_subject`, whose evidence the site writes."
    • changedInput schema / properties / kind / description
      Previous value: -"`merge` with a merge, `suppressed` or `dead_account` with a deprecation; `superseded`, `duplicate` or `update` for a change you curate."New value: +"`merge` with a merge, `suppressed`, `dead_account` or `wrong_subject` with a deprecation; `superseded`, `duplicate` or `update` for a change you curate; `supersede` takes `superseded` only (a renamed account is one). The format kinds (`pasted_address`, `renamed_account`…) go with set_value, remove or move."
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "pasted_address",
      -  "wiki_markup",
      -  "double_at",
      -  "whitespace",
      -  "bad_format",
      -  "dead_account",
      -  "renamed_account",
      -  "vh_differs",
      -  "superseded",
      -  "duplicate",
      -  "update",
      -  "dead_image",
      -  "suppressed",
      -  "merge"
      -]New value: +[
      +  "pasted_address",
      +  "wiki_markup",
      +  "double_at",
      +  "whitespace",
      +  "bad_format",
      +  "dead_account",
      +  "renamed_account",
      +  "vh_differs",
      +  "superseded",
      +  "duplicate",
      +  "update",
      +  "dead_image",
      +  "suppressed",
      +  "wrong_subject",
      +  "merge"
      +]
    • changedInput schema / properties / reason / description
      Previous value: -"deprecate, set_rank deprecated: the reason for the deprecated rank, an item id (e.g. Q113360982 \"unavailable account\")."New value: +"deprecate, set_rank deprecated: the reason for the deprecated rank, an item id (e.g. Q113360982 \"unavailable account\"). Optional for kind wrong_subject, whose reason the site picks."
    • addedInput schema / properties / reference / properties / archive_date
      Added value: +{
      +  "description": "With archive_url: the day it was archived, YYYY-MM-DD (P2960). Read from a web.archive.org or archive.today address when left out.",
      +  "type": "string"
      +}
    • addedInput schema / properties / reference / properties / archive_url
      Added value: +{
      +  "description": "A web archive’s https copy of `url` (P1065): the site loads the copy instead, so an original that is gone (it may then be http) can still be cited.",
      +  "maxLength": 500,
      +  "type": "string"
      +}
    • addedInput schema / properties / refile
      Added value: +{
      +  "description": "File it even though a person dismissed this same change before (refused 409 `dismissed` otherwise).",
      +  "type": "boolean"
      +}
  3. Changed4 schema fields changed
    • changedInput schema / properties / evidence / description
      Previous value: -"Required, except for a deprecation, whose evidence the site writes."New value: +"Required, except for a deprecation of kind `suppressed`, whose evidence the site writes."
    • changedInput schema / properties / kind / description
      Previous value: -"`merge` with a merge, `suppressed` with a deprecation; `superseded`, `duplicate` or `update` for a change you curate."New value: +"`merge` with a merge, `suppressed` or `dead_account` with a deprecation; `superseded`, `duplicate` or `update` for a change you curate."
    • changedInput schema / properties / outranked / description
      Previous value: -"A preferred rank that would make other values not current: \"end_date\" end-dates them, \"leave_normal\" sets no preferred rank."New value: +"A preferred rank that would make other values not current: \"end_date\" end-dates them, \"leave_normal\" sets no preferred rank, \"point_in_time\" leaves them normal with no end time (each must have a point in time and no start or end time). Point-in-time values alone (a follower count with P585) need no choice."
    • changedInput schema / properties / outranked / enum
      Previous value: -[
      -  "end_date",
      -  "leave_normal"
      -]New value: +[
      +  "end_date",
      +  "leave_normal",
      +  "point_in_time"
      +]
  4. Changed7 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "set_value",
      -  "remove",
      -  "move",
      -  "merge",
      -  "deprecate",
      -  "set_label",
      -  "set_description",
      -  "set_aliases",
      -  "add_claim",
      -  "add_reference",
      -  "replace_reference",
      -  "add_qualifier",
      -  "change_qualifier",
      -  "remove_qualifier",
      -  "set_rank",
      -  "supersede"
      -]New value: +[
      +  "set_value",
      +  "remove",
      +  "move",
      +  "merge",
      +  "deprecate",
      +  "set_label",
      +  "set_description",
      +  "set_aliases",
      +  "add_claim",
      +  "add_reference",
      +  "replace_reference",
      +  "add_qualifier",
      +  "change_qualifier",
      +  "remove_qualifier",
      +  "set_rank",
      +  "supersede",
      +  "move_to_item",
      +  "copy_to_item"
      +]
    • changedInput schema / properties / new_value / anyOf
      Previous value: -[
      -  {
      -    "maxLength": 1000,
      -    "type": "string"
      -  },
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "properties": {
      -      "language": {
      -        "maxLength": 20,
      -        "type": "string"
      -      },
      -      "text": {
      -        "maxLength": 1500,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "text",
      -      "language"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "amount": {
      -        "anyOf": [
      -          {
      -            "maxLength": 100,
      -            "type": "string"
      -          },
      -          {
      -            "type": "number"
      -          }
      -        ]
      -      },
      -      "unit": {
      -        "maxLength": 20,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "amount"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 1000,
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "properties": {
      +      "language": {
      +        "maxLength": 20,
      +        "type": "string"
      +      },
      +      "text": {
      +        "maxLength": 1500,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "text",
      +      "language"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "amount": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100,
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ]
      +      },
      +      "lowerBound": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100,
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ]
      +      },
      +      "unit": {
      +        "maxLength": 20,
      +        "type": "string"
      +      },
      +      "upperBound": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100,
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "amount"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / other_qid / description
      Previous value: -"merge: the item it duplicates."New value: +"merge: the item it duplicates; move_to_item, copy_to_item: the item the statement goes to."
    • changedInput schema / properties / reference / description
      Previous value: -"add_claim, supersede, add_reference, replace_reference (required): the source."New value: +"add_claim, supersede, add_reference, replace_reference (required): the source. move_to_item, copy_to_item (optional): a reference the copy gets after those read, required when one of those cites a Wikimedia page."
    • addedInput schema / properties / reference / properties / stated_in
      Added value: +{
      +  "pattern": "^Q[1-9][0-9]*$",
      +  "type": "string"
      +}
    • removedInput schema / properties / reference / required
      Removed value: -[
      -  "url"
      -]
    • changedInput schema / properties / value / anyOf
      Previous value: -[
      -  {
      -    "maxLength": 1500,
      -    "type": "string"
      -  },
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "properties": {
      -      "language": {
      -        "maxLength": 20,
      -        "type": "string"
      -      },
      -      "text": {
      -        "maxLength": 1500,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "text",
      -      "language"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "amount": {
      -        "anyOf": [
      -          {
      -            "maxLength": 100,
      -            "type": "string"
      -          },
      -          {
      -            "type": "number"
      -          }
      -        ]
      -      },
      -      "unit": {
      -        "maxLength": 20,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "amount"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 1500,
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "properties": {
      +      "language": {
      +        "maxLength": 20,
      +        "type": "string"
      +      },
      +      "text": {
      +        "maxLength": 1500,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "text",
      +      "language"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "amount": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100,
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ]
      +      },
      +      "lowerBound": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100,
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ]
      +      },
      +      "unit": {
      +        "maxLength": 20,
      +        "type": "string"
      +      },
      +      "upperBound": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100,
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "amount"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. Added

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond annotations: dry-run by default, nothing written to Wikidata, filing and audit behavior, approval requirements, the trusted-editor 200/day limit, and many 409/422 refusal and warning paths. This is consistent with readOnlyHint=false and destructiveHint=false: the tool writes a proposal row, not a Wikidata edit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening is front-loaded, but the body is an extremely long, semicolon-heavy wall of text without headings or action-based structure. The detail is mostly relevant, yet readability and scanability suffer badly, so it is not appropriately concise for an agent selecting the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 18 actions, 28 parameters, nested objects, and an output schema, the description covers workflow, edge cases, refusals, warnings, and return-side signals. Nothing material appears missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already high at 93%, but the description meaningfully expands semantics for value shapes, references, qualifiers, value_seen, outranked, and action-specific requirements. It adds much more than the schema alone, so it earns full credit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Propose a correction to a Wikidata statement', names the review workflow, and describes the proposal-only scope. It does not explicitly contrast with the closely named sibling propose_wikidata_changes, so selecting between the two still requires inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides extensive when-to-use guidance, including dry-run default, filing behavior, alternatives such as dismiss_wikidata_correction, update_entry_handles, search_commons_images, and propose_wikidata_changes for grouped account/count changes. The guidance is embedded in dense prose rather than a clear top-level selection rule, so the sibling distinction remains easy to miss.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.