Skip to main content
Glama

stackexchange-mcp-server

Server Details

Search Stack Exchange questions, fetch Q&A threads as markdown, look up tag FAQs and user profiles.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 75 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/stackexchange-mcp-server
GitHub Stars
2
Server Listing
@cyanheads/stackexchange-mcp-server

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct resource and action: site enumeration, free-text search, tag FAQ browsing, full-thread fetch, and user lookup. The one potential overlap (tag FAQ vs. free-text search) is explicitly called out in both descriptions, which tell the agent when to use which. Cross-references between tools (get_thread IDs come from search or FAQ; site params come from list_sites) further reduce misselection.

Naming Consistency5/5

All five tools share the stackexchange_ prefix followed by a consistent verb_noun pattern (get_tag_faq, get_thread, get_user, list_sites, search_questions). Slight variation between get_/list_/search_ is semantically meaningful rather than arbitrary.

Tool Count5/5

Five tools is well-scoped for a read-only Stack Exchange client: discovery, two complementary retrieval paths, thread reading, and author context. Nothing feels redundant or missing at the count level.

Completeness4/5

The core research workflow (find site → search/browse → read full thread → assess author) is fully covered with no dead ends. Gaps are minor: no answer-only retrieval, no user's-questions/answers listing, and no write operations, though those are arguably out of scope.

Available Tools

5 tools
stackexchange_get_tag_faqGet Stack Exchange Tag FAQA
Read-onlyIdempotent
Inspect

Fetch the frequently asked questions for a tag on a Stack Exchange site — Stack Exchange's own "frequently asked" selection, returned in its order, not ranked by score; compare the scores yourself. Returns a question list without bodies; use stackexchange_get_thread to read the full body and answers for any result. Results past the pageSize cap are reachable with the page parameter. Use this tool to find the questions a community keeps coming back to on a topic (e.g. tag "javascript" on stackoverflow). Use stackexchange_search_questions for free-text search rather than tag-based browsing.

NameRequiredDescriptionDefault
tagYesTag to look up (e.g. "python", "javascript", "docker"). Must match exactly.
pageNoPage of results to return, 1-based (default 1). Page 2 with pageSize 10 returns results 11–20. Each page is a separate upstream call and costs one API quota unit, which matters on the keyless 300/day tier. Without STACKEXCHANGE_API_KEY, Stack Exchange refuses any page above 25.
siteNoStack Exchange site — the api_site_parameter (e.g. "stackoverflow", "superuser") or the site's domain (e.g. "superuser.com"). Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values.stackoverflow
pageSizeNoNumber of results to return (1–30, default 10).

Output Schema

NameRequiredDescription
capNoThe pageSize cap applied to this request.
tagNoTag name used for this FAQ lookup.
pageNoThe 1-based page these results came from — 1 when the input omitted page.
siteNoStack Exchange site used for this lookup, as passed in site.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of results returned.
noticeNoActionable guidance when results are empty or filtered.
quotaMaxNoMaximum API quota calls per day (300 keyless, ~10,000 with API key).
questionsNoThe frequently asked questions for the specified tag, in Stack Exchange's order — not sorted by score.
truncatedNoTrue when results were capped at pageSize.
attributionNoContent license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution.
quotaRemainingNoRemaining API quota calls for the current day.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, but the description adds non-obvious behavior: results follow Stack Exchange's own FAQ ordering rather than score, so the caller must compare scores itself, and bodies are omitted from the result set. Pagination limits and the keyless-tier page refusal live in the schema property text rather than here, so it stops short of full context.

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

Conciseness4/5

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

Front-loaded with the core purpose, then ordering caveat, then the body-omission note and sibling routing — a sensible priority order. Slightly redundant: the example clause about 'questions a community keeps coming back to' largely re-says the opening sentence.

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?

With an output schema present, the description need not enumerate return fields, and it still flags the two things an agent must know about the payload (no bodies, non-score ordering). Combined with the schema's quota/page caveats, nothing needed to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, including page/pageSize limits, quota cost and the keyless 25-page cap, so the schema carries parameter meaning. The description only notes that results past the pageSize cap are reachable via `page`, which restates schema-level knowledge rather than adding syntax or format beyond it.

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

Purpose5/5

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

States a specific verb and resource (fetch the frequently asked questions for a tag on a Stack Exchange site) and immediately qualifies the semantics: Stack Exchange's own selection, returned in its own order, not score-ranked. An agent can distinguish it from stackexchange_search_questions and stackexchange_get_thread without opening a schema.

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

Usage Guidelines5/5

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

Explicitly routes usage: use this for questions a community keeps returning to on a topic, use stackexchange_search_questions for free-text search instead, and use stackexchange_get_thread for full bodies and answers. Both positive and negative conditions are named with the sibling tools that cover them.

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

stackexchange_get_threadGet Stack Exchange Q&A ThreadA
Read-onlyIdempotent
Inspect

Fetch a complete Q&A thread — question body and all answers, accepted answer first then sorted by score, rendered as clean markdown with fenced code blocks. Accepts a full Stack Exchange question URL, which is read from the site its host names (e.g. "https://unix.stackexchange.com/questions/88490/how-do-i-use-a-heredoc"), or an integer question ID read from site (e.g. "11227809"). HTML is normalized to markdown automatically; attribution (author + link) included per CC BY-SA 4.0. Get question IDs from stackexchange_search_questions or stackexchange_get_tag_faq.

NameRequiredDescriptionDefault
siteNoStack Exchange site a numeric question ID belongs to — the api_site_parameter (e.g. "stackoverflow", "unix") or the site's domain (e.g. "unix.stackexchange.com"). Defaults to "stackoverflow". Not needed with a URL, which names its own site: a site naming a different one is ignored, or used when the URL host is not a Stack Exchange site, and either way reported as siteConflict. Call stackexchange_list_sites to discover valid values.
maxAnswersNoMaximum number of answers to include (1–100, default 10). Answers are sorted: accepted first, then by score.
includeCommentsNoFetch the comment thread under the question and under every returned answer (default false). Comments are where a stale answer usually gets corrected ("this breaks on v3", "use X instead now"), so set this when the answer's continued accuracy matters. Costs 2 extra API calls against the daily quota regardless of how many answers are returned.
questionIdOrUrlYesNumeric question ID (e.g. "11227809") or a full Stack Exchange question URL (e.g. "https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster"). A URL carries its own site: the question is read from the URL's host, so question IDs from any Stack Exchange site resolve correctly. A URL whose host is not a Stack Exchange site is read from site when one is given, and fails as invalid_site otherwise.

Output Schema

NameRequiredDescription
capNoThe maxAnswers cap applied to this request.
linkNoDirect URL to the question.
tagsNoTags applied to this question.
errorNoPresent when the call failed. Absent on success.
scoreNoQuestion score (upvotes minus downvotes).
shownNoNumber of answers returned.
titleNoQuestion title.
answersNoAnswers sorted: accepted answer first, then by score descending.
commentsNoComments on the question, newest first, present only when includeComments is true. An empty array means this post has no comments; an absent array means its comment state is unknown — either comments were not requested, or the batched fetch was cut short before this post contributed any. Never read an absent array as "no comments".
quotaMaxNoMaximum API quota calls per day (300 keyless, ~10,000 with API key).
truncatedNoTrue when answers were capped at maxAnswers.
authorLinkNoQuestion author profile URL when available.
authorNameNoQuestion author display name when available.
questionIdNoNumeric question ID — identifies this thread on the site.
answerCountNoTotal answers the question has upstream. When greater than the returned answers[] length, more answers exist — raise maxAnswers to fetch them.
commentsCapNoMaximum comments carried per post — a post at this count reports commentsTruncated.
authorUserIdNoQuestion author numeric user ID when available — pass to stackexchange_get_user to fetch the full profile.
bodyMarkdownNoQuestion body normalized from HTML to markdown.
creationDateNoISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.
siteConflictNoPresent only when questionIdOrUrl is a URL and site names a different site — says which of the two the question was read from.
quotaRemainingNoRemaining API quota calls for the current day.
acceptedAnswerIdNoID of the accepted answer when one exists.
lastActivityDateNoISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).
commentsTruncatedNoTrue when the question's comments[] is a partial list — more exist upstream than were returned.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description still adds real value beyond that: HTML-to-markdown normalization, per-post author attribution under CC BY-SA 4.0, and deterministic answer ordering — behavior an agent could not infer from the structured fields.

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

Conciseness5/5

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

Front-loaded with the operation and its output shape, then input forms with concrete examples, then rendering/licensing, then a pointer to sibling tools for IDs. Every sentence carries distinct information with no redundancy.

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?

Output schema exists, so return values need no prose, yet the description still usefully previews the markdown rendering and ordering. With a single required parameter, four documented options, and full annotations, an agent has everything needed to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents site, maxAnswers, includeComments, and questionIdOrUrl in depth, including the siteConflict behavior and quota cost. The description only restates the URL-carries-its-site and integer-ID-read-from-site semantics, adding little beyond the schema baseline.

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

Purpose5/5

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

Specific verb and resource — fetch a complete Q&A thread including question body and all answers — plus the exact ordering rule (accepted first, then by score) and output form (markdown with fenced code blocks). This clearly distinguishes it from stackexchange_search_questions, which returns a result list rather than a full thread.

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?

Explicitly routes the agent to stackexchange_search_questions or stackexchange_get_tag_faq for obtaining question IDs, and clarifies the two input modes (URL vs integer ID). It stops short of stating when not to use this tool, and the useful guidance about enabling includeComments for accuracy-sensitive answers lives in the schema rather than the description.

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

stackexchange_get_userGet Stack Exchange User ProfileA
Read-onlyIdempotent
Inspect

Fetch a Stack Exchange user profile by numeric user ID: reputation, badge counts, answer and question counts, account and last-access dates, and top tags by answer score. Useful for credibility context on an answer author — pass the authorUserId from any question or answer in stackexchange_get_thread output. Returns profile fields plus up to 10 top tags by answer score.

NameRequiredDescriptionDefault
siteNoStack Exchange site the user ID belongs to — the api_site_parameter (e.g. "stackoverflow", "superuser") or the site's domain (e.g. "superuser.com"). User IDs are per-site, so pass the site of the thread the authorUserId came from. Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values.stackoverflow
userIdYesNumeric user ID (at most 2147483647) — use the authorUserId field from a question or answer in stackexchange_get_thread output.

Output Schema

NameRequiredDescription
linkNoDirect URL to the user profile.
errorNoPresent when the call failed. Absent on success.
userIdNoNumeric user ID on this Stack Exchange site.
topTagsNoTop tags by answer score (up to 10). Empty array for new users with no answers.
locationNoUser-provided location string when available.
quotaMaxNoMaximum API quota calls per day (300 keyless, ~10,000 with API key).
reputationNoUser reputation score.
websiteUrlNoUser-provided website URL when available.
answerCountNoTotal number of answers posted when provided by the API.
badgeCountsNoBadge counts when provided by the API.
displayNameNoDisplay name shown on the site.
creationDateNoISO 8601 timestamp of when the account was created — the account age.
questionCountNoTotal number of questions posted when provided by the API.
lastAccessDateNoISO 8601 timestamp of the last time the user accessed the site — a stale value means the author is unlikely to respond.
quotaRemainingNoRemaining API quota calls for the current day.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and openWorld, so the safety profile is covered. The description adds a real constraint not obvious elsewhere: results include up to 10 top tags by answer score. It stays silent on API quota/auth behavior for the Stack Exchange API, which would have been a useful addition for a network-backed tool.

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

Conciseness4/5

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

Three sentences, front-loaded with the verb and returned fields, then the use case. Slight waste: 'top tags by answer score' appears both in the field enumeration and again in the final sentence, making the closing line partially redundant.

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

Completeness4/5

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

With an output schema, full parameter descriptions, and safety annotations, the description covers what an agent needs to select and call this tool. The only missing piece is any note on Stack Exchange API rate limits or failure modes when a user ID is invalid for the given site.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents the site parameter (per-site user IDs, api_site_parameter vs domain, list_sites for discovery) and the userId parameter including the authorUserId provenance hint. The description restates that provenance rather than adding new meaning, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Fetch a Stack Exchange user profile by numeric user ID') and enumerates the returned fields (reputation, badges, answer/question counts, dates, top tags). This clearly distinguishes it from siblings like stackexchange_get_thread or stackexchange_search_questions, which deal with threads and search rather than a single author's profile.

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?

Gives a concrete use case ('credibility context on an answer author') and an explicit workflow: pass the authorUserId from a question or answer in stackexchange_get_thread output. It does not state when NOT to use it or name an alternative profile-lookup path, but the routing signal is strong and actionable.

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

stackexchange_list_sitesList Stack Exchange SitesA
Read-onlyIdempotent
Inspect

Enumerate all sites in the Stack Exchange network — name, api_site_parameter, audience, and URL. The api_site_parameter value is what other tools accept as the site input (e.g. "stackoverflow", "superuser", "serverfault"). Results are fetched live and optionally filtered by name. Use this tool to discover valid site parameters before calling other stackexchange_* tools.

NameRequiredDescriptionDefault
filterNoOptional case-insensitive name filter — returns only sites whose name contains all provided tokens. Omit to return all sites.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
sitesNoStack Exchange network sites matching the optional name filter.
noticeNoActionable guidance when results are empty or filtered.
quotaMaxNoMaximum API quota calls per day (300 keyless, ~10,000 with API key).
totalCountNoTotal number of sites returned after filtering.
quotaRemainingNoRemaining API quota calls for the current day.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and idempotentHint=true, so safety is covered; the description adds that results are 'fetched live' (no stale cache) and that filtering is by name. It does not mention rate limits or result-set size, which is the remaining gap for a network-wide enumeration call.

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

Conciseness5/5

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

Three tight sentences ordered by importance: what it returns, what the key field is for downstream tools, then when to use it. No repetition of the title or filler.

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?

An output schema exists and the description still names the salient returned fields; the single optional parameter and the zero-required-args path are clear. Nothing an agent needs to call this discovery tool correctly is missing.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, but the description adds real meaning: it identifies the returned `api_site_parameter` as the value other tools accept as their `site` input and gives concrete examples ('stackoverflow', 'superuser', 'serverfault'). That cross-tool mapping is not derivable from the schema alone.

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

Purpose5/5

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

States a specific verb (enumerate) and resource (all sites in the Stack Exchange network) and lists exactly what each record contains: name, api_site_parameter, audience, URL. It is clearly distinct from the sibling tools, which all operate on threads, users, tags, or search rather than network-level site metadata.

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

Usage Guidelines5/5

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

Explicitly instructs: 'Use this tool to discover valid site parameters before calling other stackexchange_* tools,' which names both the trigger and the alternative set. It also explains that filtering is optional and how to get all sites (omit the filter), leaving nothing to inference.

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

stackexchange_search_questionsSearch Stack Exchange QuestionsA
Read-onlyIdempotent
Inspect

Search questions across a Stack Exchange site. Returns ranked questions with title, score, answer count, accepted status, tags, ask and last-activity dates, and a short excerpt of the question body — not the full body. Results supply question_id values for stackexchange_get_thread, which fetches the full question body and all answers. Results past the pageSize cap are reachable with the page parameter. Use the site parameter to target a specific community (e.g. "stackoverflow", "superuser", "unix"); call stackexchange_list_sites to discover valid site values.

NameRequiredDescriptionDefault
pageNoPage of results to return, 1-based (default 1). Page 2 with pageSize 10 returns results 11–20. Each page is a separate upstream call and costs one API quota unit, which matters on the keyless 300/day tier. Without STACKEXCHANGE_API_KEY, Stack Exchange refuses any page above 25.
siteNoStack Exchange site to search — the api_site_parameter (e.g. "stackoverflow", "superuser", "serverfault") or the site's domain (e.g. "serverfault.com"). Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values.stackoverflow
sortNoResult ordering: "relevance" (default, best match), "votes" (highest score first), "activity" (most recently active), "newest" (most recently created).relevance
tagsNoFilter results to questions with all specified tags.
queryYesFull-text search query (e.g. "python async generator send value").
minScoreNoMinimum question score — excludes questions with lower scores. Setting minScore orders results by score (votes), which may differ from the requested sort.
pageSizeNoNumber of results to return (1–30, default 10).
acceptedOnlyNoWhen true, return only questions that have an accepted answer.

Output Schema

NameRequiredDescription
capNoThe pageSize cap applied to this request.
pageNoThe 1-based page these results came from — 1 when the input omitted page.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of results returned.
noticeNoActionable guidance when results are empty or filtered.
quotaMaxNoMaximum API quota calls per day (300 keyless, ~10,000 with API key).
questionsNoQuestions matching the search query, ordered by the specified sort.
truncatedNoTrue when results were capped at pageSize.
appliedSortNoSort Stack Exchange applied to these results.
attributionNoContent license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution.
quotaRemainingNoRemaining API quota calls for the current day.
sortOverrideReasonNoPresent only when appliedSort differs from the requested sort; says why.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuinely non-obvious behavior: results are ranked, bodies are excerpted rather than full, and pagination beyond the pageSize cap requires the page parameter. It stops short of restating quota/cost behavior, which the schema already carries, so a 4 rather than a 5.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, then return shape, then workflow and pagination. No filler and no repetition of structured fields.

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?

An output schema exists, so return values need only light framing, and the description supplies exactly that plus the follow-up tool. With annotations covering safety and a fully documented 8-parameter schema, an agent has everything needed to select and invoke this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds cross-parameter meaning by framing `site` as community targeting with example values and `page` as the escape hatch past the pageSize cap. It does not touch sort, tags, minScore or acceptedOnly, but those are fully documented in the schema.

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

Purpose5/5

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

States a specific verb and resource ("Search questions across a Stack Exchange site") and immediately bounds scope with what is returned and what is not ("a short excerpt of the question body — not the full body"). It also names the sibling that continues the workflow (stackexchange_get_thread), so the tool is distinguishable without opening any schema.

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

Usage Guidelines5/5

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

Explicit routing guidance: use search to obtain question_id values, then call stackexchange_get_thread for full bodies and answers; call stackexchange_list_sites to discover valid site values. It also tells the agent what to do when results are truncated ("Results past the pageSize cap are reachable with the `page` parameter").

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • Changedstackexchange_get_tag_faq5 fields changed
      • changedInput schema / properties / site / description
        Previous value: -"Stack Exchange site — use the api_site_parameter value (e.g. \"stackoverflow\", \"superuser\"). Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values."New value: +"Stack Exchange site — the api_site_parameter (e.g. \"stackoverflow\", \"superuser\") or the site's domain (e.g. \"superuser.com\"). Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `paging_depth_limit`: Stack Exchange refused the requested page because paging above page 25 needs a key. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `throttled`: Stack Exchange is throttling this server's IP address, or its backoff window outlasts what the call can wait. `pacer_shed`: The call would wait in this server's queue to Stack Exchange longer than its time budget allows. `paging_depth_limit`: Stack Exchange refused the requested page because paging above page 25 needs a key. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange reported itself temporarily unavailable or failing internally, or answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_site",
        -  "invalid_parameter",
        -  "quota_exceeded",
        -  "paging_depth_limit",
        -  "invalid_api_key",
        -  "upstream_unavailable"
        -]New value: +[
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "throttled",
        +  "pacer_shed",
        +  "paging_depth_limit",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / questions / description
        Previous value: -"Highest-voted answered questions for the specified tag, ordered by votes."New value: +"The frequently asked questions for the specified tag, in Stack Exchange's order — not sorted by score."
      • changedOutput schema / properties / site / description
        Previous value: -"Stack Exchange site api_site_parameter used for this lookup."New value: +"Stack Exchange site used for this lookup, as passed in site."
    • Changedstackexchange_get_thread6 fields changed
      • changedInput schema / properties / questionIdOrUrl / description
        Previous value: -"Numeric question ID (e.g. \"11227809\") or a full Stack Exchange question URL (e.g. \"https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster\"). The integer immediately following /questions/ is extracted from URLs."New value: +"Numeric question ID (e.g. \"11227809\") or a full Stack Exchange question URL (e.g. \"https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster\"). A URL carries its own site: the question is read from the URL's host, so question IDs from any Stack Exchange site resolve correctly. A URL whose host is not a Stack Exchange site is read from site when one is given, and fails as invalid_site otherwise."
      • removedInput schema / properties / site / default
        Removed value: -"stackoverflow"
      • changedInput schema / properties / site / description
        Previous value: -"Stack Exchange site — use the api_site_parameter value (e.g. \"stackoverflow\", \"superuser\"). Defaults to \"stackoverflow\". Must match the site where the question lives. Call stackexchange_list_sites to discover valid values."New value: +"Stack Exchange site a numeric question ID belongs to — the api_site_parameter (e.g. \"stackoverflow\", \"unix\") or the site's domain (e.g. \"unix.stackexchange.com\"). Defaults to \"stackoverflow\". Not needed with a URL, which names its own site: a site naming a different one is ignored, or used when the URL host is not a Stack Exchange site, and either way reported as siteConflict. Call stackexchange_list_sites to discover valid values."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set — SE returns HTTP 200 with no items for unknown question IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_id_or_url`: The input is not a parseable integer ID and not a recognizable SE question URL. `invalid_parameter`: Stack Exchange rejected a request parameter other than the question ID, and named the field. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set — SE returns HTTP 200 with no items for unknown question IDs rather than 404. `invalid_site`: The site value, or the host of a question URL, is not a Stack Exchange network site. `invalid_id_or_url`: The input is neither an integer ID nor text holding a /questions/{id} path, or Stack Exchange refused the ID. `invalid_parameter`: Stack Exchange rejected a request parameter other than the question ID, and named the field. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `throttled`: Stack Exchange is throttling this server's IP address, or its backoff window outlasts what the call can wait. `pacer_shed`: The call would wait in this server's queue to Stack Exchange longer than its time budget allows. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange reported itself temporarily unavailable or failing internally, or answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "question_not_found",
        -  "invalid_site",
        -  "invalid_id_or_url",
        -  "invalid_parameter",
        -  "quota_exceeded",
        -  "invalid_api_key",
        -  "upstream_unavailable"
        -]New value: +[
        +  "question_not_found",
        +  "invalid_site",
        +  "invalid_id_or_url",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "throttled",
        +  "pacer_shed",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
      • addedOutput schema / properties / siteConflict
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present only when questionIdOrUrl is a URL and site names a different site — says which of the two the question was read from.",
        +  "properties": {
        +    "resolvedBy": {
        +      "description": "Which one the question was read from: \"url_host\" when site was ignored in favor of the URL's own site, \"site\" when the URL host is not a Stack Exchange site and site was used instead.",
        +      "enum": [
        +        "url_host",
        +        "site"
        +      ],
        +      "type": "string"
        +    },
        +    "site": {
        +      "description": "The site value passed.",
        +      "type": "string"
        +    },
        +    "urlHost": {
        +      "description": "Host of the question URL.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "resolvedBy",
        +    "urlHost",
        +    "site"
        +  ],
        +  "type": "object"
        +}
    • Changedstackexchange_get_user3 fields changed
      • changedInput schema / properties / site / description
        Previous value: -"Stack Exchange site — use the api_site_parameter value (e.g. \"stackoverflow\", \"superuser\"). Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values."New value: +"Stack Exchange site the user ID belongs to — the api_site_parameter (e.g. \"stackoverflow\", \"superuser\") or the site's domain (e.g. \"superuser.com\"). User IDs are per-site, so pass the site of the thread the authorUserId came from. Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set — SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_user_id`: userId is above 2147483647 — Stack Exchange user IDs are 32-bit signed integers. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set — SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_user_id`: userId is above 2147483647 — Stack Exchange user IDs are 32-bit signed integers. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `throttled`: Stack Exchange is throttling this server's IP address, or its backoff window outlasts what the call can wait. `pacer_shed`: The call would wait in this server's queue to Stack Exchange longer than its time budget allows. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange reported itself temporarily unavailable or failing internally, or answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "user_not_found",
        -  "invalid_user_id",
        -  "invalid_site",
        -  "invalid_parameter",
        -  "quota_exceeded",
        -  "invalid_api_key",
        -  "upstream_unavailable"
        -]New value: +[
        +  "user_not_found",
        +  "invalid_user_id",
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "throttled",
        +  "pacer_shed",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
    • Changedstackexchange_list_sites2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `quota_exceeded`: The Stack Exchange API quota_remaining reached 0 during the site page walk. `invalid_parameter`: Stack Exchange rejected a parameter of the /sites request and named the field. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `quota_exceeded`: The Stack Exchange API quota_remaining reached 0 during the site page walk. `throttled`: Stack Exchange is throttling this server's IP address, or its backoff window outlasts what the call can wait. `pacer_shed`: The call would wait in this server's queue to Stack Exchange longer than its time budget allows. `invalid_parameter`: Stack Exchange rejected a parameter of the /sites request and named the field. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange reported itself temporarily unavailable or failing internally, or answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "quota_exceeded",
        -  "invalid_parameter",
        -  "invalid_api_key",
        -  "upstream_unavailable"
        -]New value: +[
        +  "quota_exceeded",
        +  "throttled",
        +  "pacer_shed",
        +  "invalid_parameter",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
    • Changedstackexchange_search_questions6 fields changed
      • changedInput schema / properties / site / description
        Previous value: -"Stack Exchange site to search — use the api_site_parameter value (e.g. \"stackoverflow\", \"superuser\", \"serverfault\"). Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values."New value: +"Stack Exchange site to search — the api_site_parameter (e.g. \"stackoverflow\", \"superuser\", \"serverfault\") or the site's domain (e.g. \"serverfault.com\"). Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values."
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "questions",
        -      "page",
        -      "attribution",
        -      "quotaRemaining",
        -      "quotaMax"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "questions",
        +      "page",
        +      "attribution",
        +      "quotaRemaining",
        +      "quotaMax",
        +      "appliedSort"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / appliedSort
        Added value: +{
        +  "description": "Sort Stack Exchange applied to these results.",
        +  "enum": [
        +    "relevance",
        +    "votes",
        +    "activity",
        +    "newest"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `paging_depth_limit`: Stack Exchange refused the requested page because paging above page 25 needs a key. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `throttled`: Stack Exchange is throttling this server's IP address, or its backoff window outlasts what the call can wait. `pacer_shed`: The call would wait in this server's queue to Stack Exchange longer than its time budget allows. `paging_depth_limit`: Stack Exchange refused the requested page because paging above page 25 needs a key. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange reported itself temporarily unavailable or failing internally, or answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_site",
        -  "invalid_parameter",
        -  "quota_exceeded",
        -  "paging_depth_limit",
        -  "invalid_api_key",
        -  "upstream_unavailable"
        -]New value: +[
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "throttled",
        +  "pacer_shed",
        +  "paging_depth_limit",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
      • addedOutput schema / properties / sortOverrideReason
        Added value: +{
        +  "description": "Present only when appliedSort differs from the requested sort; says why.",
        +  "type": "string"
        +}
  2. 1 tool update
    • Changedstackexchange_search_questions1 field changed
      • changedOutput schema / properties / questions / items / properties / excerpt / description
        Previous value: -"Opening prose of the question body, trimmed to roughly 300 characters and ending in \"…\" when cut. Code blocks are omitted; absent when the question body is nothing but code."New value: +"Opening prose of the question body, trimmed to roughly 300 characters and ending in \"…\" when cut. Code blocks and markdown structure are omitted; absent when the question body is nothing but code."
  3. 5 tool updates
    • Changedstackexchange_get_tag_faq5 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page of results to return, 1-based (default 1). Page 2 with pageSize 10 returns results 11–20. Each page is a separate upstream call and costs one API quota unit, which matters on the keyless 300/day tier. Without STACKEXCHANGE_API_KEY, Stack Exchange refuses any page above 25.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "questions",
        -      "tag",
        -      "site",
        -      "attribution",
        -      "quotaRemaining",
        -      "quotaMax"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "questions",
        +      "tag",
        +      "site",
        +      "page",
        +      "attribution",
        +      "quotaRemaining",
        +      "quotaMax"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `paging_depth_limit`: Stack Exchange refused the requested page because paging above page 25 needs a key. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_site",
        -  "invalid_parameter",
        -  "quota_exceeded"
        -]New value: +[
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "paging_depth_limit",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "The 1-based page these results came from — 1 when the input omitted page.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Changedstackexchange_get_thread8 fields changed
      • addedInput schema / properties / includeComments
        Added value: +{
        +  "default": false,
        +  "description": "Fetch the comment thread under the question and under every returned answer (default false). Comments are where a stale answer usually gets corrected (\"this breaks on v3\", \"use X instead now\"), so set this when the answer's continued accuracy matters. Costs 2 extra API calls against the daily quota regardless of how many answers are returned.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / answers / items / properties / comments
        Added value: +{
        +  "description": "Comments on this answer, newest first, present only when includeComments is true. An empty array means this post has no comments; an absent array means its comment state is unknown — either comments were not requested, or the batched fetch was cut short before this post contributed any. Never read an absent array as \"no comments\".",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "A single comment with markdown body, score, date, and author attribution.",
        +    "properties": {
        +      "authorLink": {
        +        "description": "Comment author profile URL when available.",
        +        "type": "string"
        +      },
        +      "authorName": {
        +        "description": "Comment author display name when available.",
        +        "type": "string"
        +      },
        +      "bodyMarkdown": {
        +        "description": "Comment body normalized from HTML to markdown.",
        +        "type": "string"
        +      },
        +      "commentId": {
        +        "description": "Numeric comment ID.",
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      },
        +      "creationDate": {
        +        "description": "ISO 8601 timestamp of when the comment was posted — the newest comments carry the freshest corrections.",
        +        "type": "string"
        +      },
        +      "score": {
        +        "description": "Comment score — comments can score below zero.",
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "commentId",
        +      "score",
        +      "bodyMarkdown"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / answers / items / properties / commentsTruncated
        Added value: +{
        +  "description": "True when this answer's comments[] is a partial list — more exist upstream than were returned.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / comments
        Added value: +{
        +  "description": "Comments on the question, newest first, present only when includeComments is true. An empty array means this post has no comments; an absent array means its comment state is unknown — either comments were not requested, or the batched fetch was cut short before this post contributed any. Never read an absent array as \"no comments\".",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "A single comment with markdown body, score, date, and author attribution.",
        +    "properties": {
        +      "authorLink": {
        +        "description": "Comment author profile URL when available.",
        +        "type": "string"
        +      },
        +      "authorName": {
        +        "description": "Comment author display name when available.",
        +        "type": "string"
        +      },
        +      "bodyMarkdown": {
        +        "description": "Comment body normalized from HTML to markdown.",
        +        "type": "string"
        +      },
        +      "commentId": {
        +        "description": "Numeric comment ID.",
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      },
        +      "creationDate": {
        +        "description": "ISO 8601 timestamp of when the comment was posted — the newest comments carry the freshest corrections.",
        +        "type": "string"
        +      },
        +      "score": {
        +        "description": "Comment score — comments can score below zero.",
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "commentId",
        +      "score",
        +      "bodyMarkdown"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / commentsCap
        Added value: +{
        +  "description": "Maximum comments carried per post — a post at this count reports commentsTruncated.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / commentsTruncated
        Added value: +{
        +  "description": "True when the question's comments[] is a partial list — more exist upstream than were returned.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set — SE returns HTTP 200 with no items for unknown question IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_id_or_url`: The input is not a parseable integer ID and not a recognizable SE question URL. `invalid_parameter`: Stack Exchange rejected a request parameter other than the question ID, and named the field. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set — SE returns HTTP 200 with no items for unknown question IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_id_or_url`: The input is not a parseable integer ID and not a recognizable SE question URL. `invalid_parameter`: Stack Exchange rejected a request parameter other than the question ID, and named the field. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "question_not_found",
        -  "invalid_site",
        -  "invalid_id_or_url",
        -  "invalid_parameter",
        -  "quota_exceeded"
        -]New value: +[
        +  "question_not_found",
        +  "invalid_site",
        +  "invalid_id_or_url",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
    • Changedstackexchange_get_user2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set — SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_user_id`: userId is above 2147483647 — Stack Exchange user IDs are 32-bit signed integers. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set — SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_user_id`: userId is above 2147483647 — Stack Exchange user IDs are 32-bit signed integers. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "user_not_found",
        -  "invalid_user_id",
        -  "invalid_site",
        -  "invalid_parameter",
        -  "quota_exceeded"
        -]New value: +[
        +  "user_not_found",
        +  "invalid_user_id",
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
    • Changedstackexchange_list_sites2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `quota_exceeded`: The Stack Exchange API quota_remaining reached 0 during the site page walk. `invalid_parameter`: Stack Exchange rejected a parameter of the /sites request and named the field. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / error / properties / data / properties / reason / examples
        Added value: +[
        +  "quota_exceeded",
        +  "invalid_parameter",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
    • Changedstackexchange_search_questions6 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page of results to return, 1-based (default 1). Page 2 with pageSize 10 returns results 11–20. Each page is a separate upstream call and costs one API quota unit, which matters on the keyless 300/day tier. Without STACKEXCHANGE_API_KEY, Stack Exchange refuses any page above 25.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "questions",
        -      "attribution",
        -      "quotaRemaining",
        -      "quotaMax"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "questions",
        +      "page",
        +      "attribution",
        +      "quotaRemaining",
        +      "quotaMax"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. `paging_depth_limit`: Stack Exchange refused the requested page because paging above page 25 needs a key. `invalid_api_key`: Stack Exchange does not recognize the API key this server is configured with. `upstream_unavailable`: Stack Exchange answered with a body that is not the expected JSON envelope. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_site",
        -  "invalid_parameter",
        -  "quota_exceeded"
        -]New value: +[
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded",
        +  "paging_depth_limit",
        +  "invalid_api_key",
        +  "upstream_unavailable"
        +]
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "The 1-based page these results came from — 1 when the input omitted page.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / questions / items / properties / excerpt / description
        Previous value: -"Short text excerpt from the question when available."New value: +"Opening prose of the question body, trimmed to roughly 300 characters and ending in \"…\" when cut. Code blocks are omitted; absent when the question body is nothing but code."
  4. 4 tool updates
    • Changedstackexchange_get_tag_faq5 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_site",
        -  "quota_exceeded"
        -]New value: +[
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded"
        +]
      • changedOutput schema / properties / questions / items / description
        Previous value: -"A Stack Exchange FAQ question with score, answer count, and tags."New value: +"A Stack Exchange FAQ question with score, answer count, tags, and dates."
      • addedOutput schema / properties / questions / items / properties / creationDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / questions / items / properties / lastActivityDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).",
        +  "type": "string"
        +}
    • Changedstackexchange_get_thread7 fields changed
      • changedOutput schema / properties / answers / items / description
        Previous value: -"A single Q&A answer with markdown body, score, and author attribution."New value: +"A single Q&A answer with markdown body, score, dates, and author attribution."
      • addedOutput schema / properties / answers / items / properties / creationDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of when the answer was posted — an old answer may predate the current API.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / answers / items / properties / lastActivityDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of the most recent edit or activity on the answer.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / creationDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set — SE returns HTTP 200 with no items for unknown question IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_id_or_url`: The input is not a parseable integer ID and not a recognizable SE question URL. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set — SE returns HTTP 200 with no items for unknown question IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_id_or_url`: The input is not a parseable integer ID and not a recognizable SE question URL. `invalid_parameter`: Stack Exchange rejected a request parameter other than the question ID, and named the field. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "question_not_found",
        -  "invalid_site",
        -  "invalid_id_or_url",
        -  "quota_exceeded"
        -]New value: +[
        +  "question_not_found",
        +  "invalid_site",
        +  "invalid_id_or_url",
        +  "invalid_parameter",
        +  "quota_exceeded"
        +]
      • addedOutput schema / properties / lastActivityDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).",
        +  "type": "string"
        +}
    • Changedstackexchange_get_user5 fields changed
      • changedInput schema / properties / userId / description
        Previous value: -"Numeric user ID — use the authorUserId field from a question or answer in stackexchange_get_thread output."New value: +"Numeric user ID (at most 2147483647) — use the authorUserId field from a question or answer in stackexchange_get_thread output."
      • addedOutput schema / properties / creationDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of when the account was created — the account age.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set — SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set — SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_user_id`: userId is above 2147483647 — Stack Exchange user IDs are 32-bit signed integers. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "user_not_found",
        -  "invalid_site",
        -  "quota_exceeded"
        -]New value: +[
        +  "user_not_found",
        +  "invalid_user_id",
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded"
        +]
      • addedOutput schema / properties / lastAccessDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of the last time the user accessed the site — a stale value means the author is unlikely to respond.",
        +  "type": "string"
        +}
    • Changedstackexchange_search_questions5 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_parameter`: Stack Exchange rejected a request parameter and named the field rather than reporting a bad site. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_site",
        -  "quota_exceeded"
        -]New value: +[
        +  "invalid_site",
        +  "invalid_parameter",
        +  "quota_exceeded"
        +]
      • changedOutput schema / properties / questions / items / description
        Previous value: -"A Stack Exchange question with score, answer count, tags, and optional excerpt."New value: +"A Stack Exchange question with score, answer count, tags, dates, and optional excerpt."
      • addedOutput schema / properties / questions / items / properties / creationDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / questions / items / properties / lastActivityDate
        Added value: +{
        +  "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).",
        +  "type": "string"
        +}
  5. 5 tool updates
    • Changedstackexchange_get_tag_faq6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "questions",
        +      "tag",
        +      "site",
        +      "attribution",
        +      "quotaRemaining",
        +      "quotaMax"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_site",
        +            "quota_exceeded"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "questions",
        -  "tag",
        -  "site",
        -  "attribution",
        -  "quotaRemaining",
        -  "quotaMax"
        -]
    • Changedstackexchange_get_thread6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "questionId",
        +      "title",
        +      "link",
        +      "score",
        +      "tags",
        +      "bodyMarkdown",
        +      "answers",
        +      "quotaRemaining",
        +      "quotaMax"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set — SE returns HTTP 200 with no items for unknown question IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `invalid_id_or_url`: The input is not a parseable integer ID and not a recognizable SE question URL. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "question_not_found",
        +            "invalid_site",
        +            "invalid_id_or_url",
        +            "quota_exceeded"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "questionId",
        -  "title",
        -  "link",
        -  "score",
        -  "tags",
        -  "bodyMarkdown",
        -  "answers",
        -  "quotaRemaining",
        -  "quotaMax"
        -]
    • Changedstackexchange_get_user6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "userId",
        +      "displayName",
        +      "link",
        +      "reputation",
        +      "topTags",
        +      "quotaRemaining",
        +      "quotaMax"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set — SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "user_not_found",
        +            "invalid_site",
        +            "quota_exceeded"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "userId",
        -  "displayName",
        -  "link",
        -  "reputation",
        -  "topTags",
        -  "quotaRemaining",
        -  "quotaMax"
        -]
    • Changedstackexchange_list_sites6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "sites",
        +      "totalCount",
        +      "quotaRemaining",
        +      "quotaMax"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "sites",
        -  "totalCount",
        -  "quotaRemaining",
        -  "quotaMax"
        -]
    • Changedstackexchange_search_questions6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "questions",
        +      "attribution",
        +      "quotaRemaining",
        +      "quotaMax"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_site`: The provided site value is not a valid Stack Exchange network site identifier. `quota_exceeded`: The Stack Exchange API quota_remaining has reached 0. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_site",
        +            "quota_exceeded"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "questions",
        -  "attribution",
        -  "quotaRemaining",
        -  "quotaMax"
        -]
  6. 2 tool updates
    • Changedstackexchange_get_thread1 field changed
      • addedOutput schema / properties / answerCount
        Added value: +{
        +  "description": "Total answers the question has upstream. When greater than the returned answers[] length, more answers exist — raise maxAnswers to fetch them.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Changedstackexchange_search_questions1 field changed
      • changedInput schema / properties / minScore / description
        Previous value: -"Minimum question score — excludes questions with lower scores."New value: +"Minimum question score — excludes questions with lower scores. Setting minScore orders results by score (votes), which may differ from the requested sort."
  7. 3 tool updates
    • Changedstackexchange_get_tag_faq3 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The pageSize cap applied to this request.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of results returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when results were capped at pageSize.",
        +  "type": "boolean"
        +}
    • Changedstackexchange_get_thread3 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The maxAnswers cap applied to this request.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of answers returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when answers were capped at maxAnswers.",
        +  "type": "boolean"
        +}
    • Changedstackexchange_search_questions3 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The pageSize cap applied to this request.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of results returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when results were capped at pageSize.",
        +  "type": "boolean"
        +}
  8. 5 tool updates
    • First observedstackexchange_get_tag_faq
    • First observedstackexchange_get_thread
    • First observedstackexchange_get_user
    • First observedstackexchange_list_sites
    • First observedstackexchange_search_questions

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Wraps the StackExchange API v2.3 to enable reading StackExchange data (questions, answers, etc.) without authentication. Allows AI agents to query StackExchange content through natural language or direct tool calls.
    7 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients to search, read, and interact with Stack Overflow for Agents posts and Stack Exchange Q&A, including posting, replying, voting, verification, and session management through 17 stdio tools.
    17
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides LLMs with tools to search Stack Overflow for programming solutions, helping ground responses in real-world code examples.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.