stackexchange-mcp-server
Server Details
Search Stack Exchange questions, fetch Q&A threads as markdown, look up tag FAQs and user profiles.
- Status
- Healthy
- 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
Scored across 5 tools
Each tool has a clearly distinct purpose: listing sites, searching questions, browsing by tag, fetching a full thread, and retrieving a user profile. The two question-listing tools are differentiated explicitly as tag-based browsing versus free-text search, so there is no meaningful overlap.
All five tools share a consistent stackexchange_verb_noun snake_case pattern. The verbs (list, search, get) and nouns (sites, questions, tag_faq, thread, user) follow an obvious and predictable convention.
Five tools is a well-scoped, focused set for a read-only Stack Exchange MCP server. Each tool covers a necessary part of the QA retrieval workflow without redundancy or filler.
The core workflow is covered: discover valid sites, search or browse by tag, retrieve the full thread, and inspect the author for credibility. Minor gaps such as fetching comments or listing a user's past questions exist but are not essential to the main purpose.
Available Tools
5 toolsstackexchange_get_tag_faqGet Stack Exchange Tag FAQARead-onlyIdempotentInspect
Fetch the highest-voted answered questions for a tag on a Stack Exchange site — the canonical "best answers in X" list. 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 authoritative community resources on a topic (e.g. tag "javascript" on stackoverflow). Use stackexchange_search_questions for free-text search rather than tag-based browsing.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag to look up (e.g. "python", "javascript", "docker"). Must match exactly. | |
| page | No | 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. | |
| site | No | Stack Exchange site — use the api_site_parameter value (e.g. "stackoverflow", "superuser"). Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values. | stackoverflow |
| pageSize | No | Number of results to return (1–30, default 10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The pageSize cap applied to this request. |
| tag | No | Tag name used for this FAQ lookup. |
| page | No | The 1-based page these results came from — 1 when the input omitted page. |
| site | No | Stack Exchange site api_site_parameter used for this lookup. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of results returned. |
| notice | No | Actionable guidance when results are empty or filtered. |
| quotaMax | No | Maximum API quota calls per day (300 keyless, ~10,000 with API key). |
| questions | No | Highest-voted answered questions for the specified tag, ordered by votes. |
| truncated | No | True when results were capped at pageSize. |
| attribution | No | Content license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution. |
| quotaRemaining | No | Remaining API quota calls for the current day. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint/idempotentHint annotations already establish safety. The description adds behavior beyond that: results are 'highest-voted answered questions,' returned 'without bodies,' and pagination beyond pageSize is supported via the page parameter. This is useful, though it does not address rate limits or authentication nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load what the tool returns)Skip? Actually it is four sentences. Four short sentences, all informative: cardinality and ordering, output shape, pagination hint, and sibling-tool steering. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read-only tool with no output schema, the description covers what comes back (question list without bodies), how results are ordered, how to page past the cap, and which sibling to call next. An agent has everything needed to invoke and chain correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description itself adds minimal parameter detail, but the input schema is already thorough—tag is defined as an exact-match lookup, page has min/max/default, and format options capture Stack Exchange format quirks. At full schema coverage, the baseline 3 applies; the description correctly does not duplicate this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Fetch') plus a precise resource ('highest-voted answered questions for a tag'), and immediately distinguishes itself as the canonical 'best answers in X' list. It also names the sibling that handles full bodies, so an agent can tell this tool apart from stackexchange_get_thread and stackexchange_search_questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('find the authoritative community resources on a topic') and when not to (free-text search → stackexchange_search_questions; full content → stackexchange_get_thread). This is exactly the kind of conditional routing guidance agents need.
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 ThreadARead-onlyIdempotentInspect
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 an integer question ID or a full Stack Exchange question URL (e.g. "https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster" or "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.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | 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. | stackoverflow |
| maxAnswers | No | Maximum number of answers to include (1–100, default 10). Answers are sorted: accepted first, then by score. | |
| includeComments | No | 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. | |
| questionIdOrUrl | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The maxAnswers cap applied to this request. |
| link | No | Direct URL to the question. |
| tags | No | Tags applied to this question. |
| error | No | Present when the call failed. Absent on success. |
| score | No | Question score (upvotes minus downvotes). |
| shown | No | Number of answers returned. |
| title | No | Question title. |
| answers | No | Answers sorted: accepted answer first, then by score descending. |
| comments | No | 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". |
| quotaMax | No | Maximum API quota calls per day (300 keyless, ~10,000 with API key). |
| truncated | No | True when answers were capped at maxAnswers. |
| authorLink | No | Question author profile URL when available. |
| authorName | No | Question author display name when available. |
| questionId | No | Numeric question ID — identifies this thread on the site. |
| answerCount | No | Total answers the question has upstream. When greater than the returned answers[] length, more answers exist — raise maxAnswers to fetch them. |
| commentsCap | No | Maximum comments carried per post — a post at this count reports commentsTruncated. |
| authorUserId | No | Question author numeric user ID when available — pass to stackexchange_get_user to fetch the full profile. |
| bodyMarkdown | No | Question body normalized from HTML to markdown. |
| creationDate | No | ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current. |
| quotaRemaining | No | Remaining API quota calls for the current day. |
| acceptedAnswerId | No | ID of the accepted answer when one exists. |
| lastActivityDate | No | ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment). |
| commentsTruncated | No | True when the question's comments[] is a partial list — more exist upstream than were returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several behavioral traits beyond the annotations: automatic HTML-to-markdown normalization, attribution per CC BY-SA 4.0, answer sorting order, and the cost of includeComments (2 extra API calls). It adds real operational detail without contradicting the readOnlyHint, openWorldHint, or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight, front-loaded with the core behavior, and every sentence earns its place. It packs essential details (sorting, markdown, input formats, attribution, ID sourcing) into a compact paragraph with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return-value details are covered there. The description fully addresses input formats, behavior, and side effects (API cost), and even directs the agent to sibling tools for ID discovery. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description goes further by explaining URL-to-ID extraction for questionIdOrUrl and the rationale plus cost for includeComments. This adds meaning beyond the schema definitions for those parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Fetch a complete Q&A thread' with details on content (question body, answers), sorting (accepted first, then score), and output format (markdown). This unambiguously distinguishes it from sibling tools like search_questions or list_sites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent exactly when to use this tool (when you have a question ID or URL) and even points to the sibling tools that supply those IDs ('Get question IDs from stackexchange_search_questions or stackexchange_get_tag_faq'). It does not explicitly state when not to use it, but the usage context is clear and actionable.
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 ProfileARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Stack Exchange site — use the api_site_parameter value (e.g. "stackoverflow", "superuser"). Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values. | stackoverflow |
| userId | Yes | Numeric user ID (at most 2147483647) — use the authorUserId field from a question or answer in stackexchange_get_thread output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | No | Direct URL to the user profile. |
| error | No | Present when the call failed. Absent on success. |
| userId | No | Numeric user ID on this Stack Exchange site. |
| topTags | No | Top tags by answer score (up to 10). Empty array for new users with no answers. |
| location | No | User-provided location string when available. |
| quotaMax | No | Maximum API quota calls per day (300 keyless, ~10,000 with API key). |
| reputation | No | User reputation score. |
| websiteUrl | No | User-provided website URL when available. |
| answerCount | No | Total number of answers posted when provided by the API. |
| badgeCounts | No | Badge counts when provided by the API. |
| displayName | No | Display name shown on the site. |
| creationDate | No | ISO 8601 timestamp of when the account was created — the account age. |
| questionCount | No | Total number of questions posted when provided by the API. |
| lastAccessDate | No | ISO 8601 timestamp of the last time the user accessed the site — a stale value means the author is unlikely to respond. |
| quotaRemaining | No | Remaining API quota calls for the current day. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds a meaningful behavioral boundary: it returns up to 10 top tags by answer score, which is a useful constraint beyond the schema. Rate limits and auth are not discussed, but they are less critical for a read-only profile fetch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and front-loaded with the core action. The second sentence earns its place by stating the calling context and parameter source. The third sentence is slightly redundant with the first sentence's field list, but it is short and clarifies the 10-tag limit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only, idempotent tool with an output schema, this description is complete: it states what the tool returns, when to use it, and exactly where to get the required ID. Nothing an agent needs in order to select and invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is already strong. The description adds semantic value by linking the userId parameter to a concrete source field, authorUserId from stackexchange_get_thread output, which helps an agent know how to populate the required parameter correctly. The site parameter is adequately documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair, 'Fetch a Stack Exchange user profile by numeric user ID,' and enumerates the returned fields (reputation, badge counts, question/answer counts, dates, top tags). This clearly distinguishes the tool from siblings like stackexchange_get_thread and stackexchange_search_questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete trigger: 'Useful for credibility context on an answer author,' and tells the agent exactly where to source the required ID ('pass the authorUserId from any question or answer in stackexchange_get_thread output'). It does not spell out when not to use it or name alternatives, but the intended use case is explicit.
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 SitesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional case-insensitive name filter — returns only sites whose name contains all provided tokens. Omit to return all sites. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| sites | No | Stack Exchange network sites matching the optional name filter. |
| notice | No | Actionable guidance when results are empty or filtered. |
| quotaMax | No | Maximum API quota calls per day (300 keyless, ~10,000 with API key). |
| totalCount | No | Total number of sites returned after filtering. |
| quotaRemaining | No | Remaining API quota calls for the current day. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent behavior, so the description correctly adds value with 'Results are fetched live,' which tells the agent results come from a live network call rather than a cached snapshot. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences of relevant, front-loaded information. The second sentence about api_site_parameter is useful for linkage to sibling tools, but 'optionally filtered by name' is a minor repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one optional parameter, a complete input schema, and an output schema, so the description only needs to communicate usage context and behavioral traits. It covers the fields returned, the live-fetch behavior, and the discovery purpose, leaving no significant gap for the agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the filter parameter is fully documented in the input schema (case-insensitive, token containment, omit-to-get-all). The prose description only restates 'optionally filtered by name' and does not add meaning not already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Enumerate'), a concrete resource ('all sites in the Stack Exchange network'), and the fields returned (name, api_site_parameter, audience, URL). It also positions itself relative to sibling stackexchange_* tools by saying it is for discovering valid site parameters, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use it: 'Use this tool to discover valid site parameters before calling other stackexchange_* tools.' This gives clear context, though it does not spell out contrasts with each sibling tool or list exclusions.
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 QuestionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 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. | |
| site | No | 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. | stackoverflow |
| sort | No | Result ordering: "relevance" (default, best match), "votes" (highest score first), "activity" (most recently active), "newest" (most recently created). | relevance |
| tags | No | Filter results to questions with all specified tags. | |
| query | Yes | Full-text search query (e.g. "python async generator send value"). | |
| minScore | No | Minimum question score — excludes questions with lower scores. Setting minScore orders results by score (votes), which may differ from the requested sort. | |
| pageSize | No | Number of results to return (1–30, default 10). | |
| acceptedOnly | No | When true, return only questions that have an accepted answer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The pageSize cap applied to this request. |
| page | No | The 1-based page these results came from — 1 when the input omitted page. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of results returned. |
| notice | No | Actionable guidance when results are empty or filtered. |
| quotaMax | No | Maximum API quota calls per day (300 keyless, ~10,000 with API key). |
| questions | No | Questions matching the search query, ordered by the specified sort. |
| truncated | No | True when results were capped at pageSize. |
| attribution | No | Content license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution. |
| quotaRemaining | No | Remaining API quota calls for the current day. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description discloses that results contain excerpts only, that pagination costs an additional API quota call, that page above 25 is unavailable without a key, and that question_id is the link to the sibling tool. This is far more than the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences: what it returns, what it omits, how results feed the sibling tool, and how to page/site. Every sentence earns its place and the most decision-relevant facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool, the description fully covers return shape, exclusions, pagination, quota cost, site targeting, and inter-tool relationships. Nothing needed to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already provides 100% parameter coverage with descriptions for default, range, and meaning.utils. The description adds cross-parameter context (page quota cost, pageSize cap) and clarifies the site enum via list_sites. This exceeds the baseline but does not need to repeat the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb-resource pair: 'Search questions across a Stack Exchange site.' It lists the returned fields (score, answer count, accepted status, tags, dates, excerpt), explicitly states what it does not return (full body), and frames the result as a discovery tool. It clearly differs from the referenced get_thread tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent: use this tool for ranked search results and take question_id to stackexchange_get_thread when the full body is needed. It also tells the agent to use stackexchange_list_sites for valid site values. These are concrete, actionable selection cues.
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 tool update
- Changed
stackexchange_search_questions1 field changed- changed
Output schema / properties / questions / items / properties / excerpt / descriptionPrevious 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."
5 tool updates
- Changed
stackexchange_get_tag_faq5 fields changed- added
Input schema / properties / pageAdded 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" +} - changed
Output schema / anyOfPrevious 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" + ] + } +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_site", - "invalid_parameter", - "quota_exceeded" -]New value: +[ + "invalid_site", + "invalid_parameter", + "quota_exceeded", + "paging_depth_limit", + "invalid_api_key", + "upstream_unavailable" +] - added
Output schema / properties / pageAdded value: +{ + "description": "The 1-based page these results came from — 1 when the input omitted page.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +}
- Changed
stackexchange_get_thread8 fields changed- added
Input schema / properties / includeCommentsAdded 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" +} - added
Output schema / properties / answers / items / properties / commentsAdded 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" +} - added
Output schema / properties / answers / items / properties / commentsTruncatedAdded value: +{ + "description": "True when this answer's comments[] is a partial list — more exist upstream than were returned.", + "type": "boolean" +} - added
Output schema / properties / commentsAdded 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" +} - added
Output schema / properties / commentsCapAdded value: +{ + "description": "Maximum comments carried per post — a post at this count reports commentsTruncated.", + "type": "number" +} - added
Output schema / properties / commentsTruncatedAdded value: +{ + "description": "True when the question's comments[] is a partial list — more exist upstream than were returned.", + "type": "boolean" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious 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" +]
- Changed
stackexchange_get_user2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious 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" +]
- Changed
stackexchange_list_sites2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - added
Output schema / properties / error / properties / data / properties / reason / examplesAdded value: +[ + "quota_exceeded", + "invalid_parameter", + "invalid_api_key", + "upstream_unavailable" +]
- Changed
stackexchange_search_questions6 fields changed- added
Input schema / properties / pageAdded 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" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "questions", - "attribution", - "quotaRemaining", - "quotaMax" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "questions", + "page", + "attribution", + "quotaRemaining", + "quotaMax" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_site", - "invalid_parameter", - "quota_exceeded" -]New value: +[ + "invalid_site", + "invalid_parameter", + "quota_exceeded", + "paging_depth_limit", + "invalid_api_key", + "upstream_unavailable" +] - added
Output schema / properties / pageAdded value: +{ + "description": "The 1-based page these results came from — 1 when the input omitted page.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - changed
Output schema / properties / questions / items / properties / excerpt / descriptionPrevious 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 tool updates
- Changed
stackexchange_get_tag_faq5 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_site", - "quota_exceeded" -]New value: +[ + "invalid_site", + "invalid_parameter", + "quota_exceeded" +] - changed
Output schema / properties / questions / items / descriptionPrevious 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." - added
Output schema / properties / questions / items / properties / creationDateAdded value: +{ + "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.", + "type": "string" +} - added
Output schema / properties / questions / items / properties / lastActivityDateAdded value: +{ + "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).", + "type": "string" +}
- Changed
stackexchange_get_thread7 fields changed- changed
Output schema / properties / answers / items / descriptionPrevious 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." - added
Output schema / properties / answers / items / properties / creationDateAdded value: +{ + "description": "ISO 8601 timestamp of when the answer was posted — an old answer may predate the current API.", + "type": "string" +} - added
Output schema / properties / answers / items / properties / lastActivityDateAdded value: +{ + "description": "ISO 8601 timestamp of the most recent edit or activity on the answer.", + "type": "string" +} - added
Output schema / properties / creationDateAdded value: +{ + "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.", + "type": "string" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious 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" +] - added
Output schema / properties / lastActivityDateAdded value: +{ + "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).", + "type": "string" +}
- Changed
stackexchange_get_user5 fields changed- changed
Input schema / properties / userId / descriptionPrevious 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." - added
Output schema / properties / creationDateAdded value: +{ + "description": "ISO 8601 timestamp of when the account was created — the account age.", + "type": "string" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "user_not_found", - "invalid_site", - "quota_exceeded" -]New value: +[ + "user_not_found", + "invalid_user_id", + "invalid_site", + "invalid_parameter", + "quota_exceeded" +] - added
Output schema / properties / lastAccessDateAdded 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" +}
- Changed
stackexchange_search_questions5 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_site", - "quota_exceeded" -]New value: +[ + "invalid_site", + "invalid_parameter", + "quota_exceeded" +] - changed
Output schema / properties / questions / items / descriptionPrevious 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." - added
Output schema / properties / questions / items / properties / creationDateAdded value: +{ + "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.", + "type": "string" +} - added
Output schema / properties / questions / items / properties / lastActivityDateAdded value: +{ + "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).", + "type": "string" +}
5 tool updates
- Changed
stackexchange_get_tag_faq6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "questions", + "tag", + "site", + "attribution", + "quotaRemaining", + "quotaMax" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "questions", - "tag", - "site", - "attribution", - "quotaRemaining", - "quotaMax" -]
- Changed
stackexchange_get_thread6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "questionId", + "title", + "link", + "score", + "tags", + "bodyMarkdown", + "answers", + "quotaRemaining", + "quotaMax" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "questionId", - "title", - "link", - "score", - "tags", - "bodyMarkdown", - "answers", - "quotaRemaining", - "quotaMax" -]
- Changed
stackexchange_get_user6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "userId", + "displayName", + "link", + "reputation", + "topTags", + "quotaRemaining", + "quotaMax" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "userId", - "displayName", - "link", - "reputation", - "topTags", - "quotaRemaining", - "quotaMax" -]
- Changed
stackexchange_list_sites6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "sites", + "totalCount", + "quotaRemaining", + "quotaMax" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "sites", - "totalCount", - "quotaRemaining", - "quotaMax" -]
- Changed
stackexchange_search_questions6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "questions", + "attribution", + "quotaRemaining", + "quotaMax" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "questions", - "attribution", - "quotaRemaining", - "quotaMax" -]
2 tool updates
- Changed
stackexchange_get_thread1 field changed- added
Output schema / properties / answerCountAdded 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" +}
- Changed
stackexchange_search_questions1 field changed- changed
Input schema / properties / minScore / descriptionPrevious 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."
3 tool updates
- Changed
stackexchange_get_tag_faq3 fields changed- added
Output schema / properties / capAdded value: +{ + "description": "The pageSize cap applied to this request.", + "type": "number" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Number of results returned.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when results were capped at pageSize.", + "type": "boolean" +}
- Changed
stackexchange_get_thread3 fields changed- added
Output schema / properties / capAdded value: +{ + "description": "The maxAnswers cap applied to this request.", + "type": "number" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Number of answers returned.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when answers were capped at maxAnswers.", + "type": "boolean" +}
- Changed
stackexchange_search_questions3 fields changed- added
Output schema / properties / capAdded value: +{ + "description": "The pageSize cap applied to this request.", + "type": "number" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Number of results returned.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when results were capped at pageSize.", + "type": "boolean" +}
5 tool updates
- First observed
stackexchange_get_tag_faq - First observed
stackexchange_get_thread - First observed
stackexchange_get_user - First observed
stackexchange_list_sites - First observed
stackexchange_search_questions
Related MCP Connectors
StackExchange MCP — wraps the StackExchange API v2.3 (free, no auth required for read)
Access Stack Overflow's trusted and verified technical questions and answers.
Scrape Stack Overflow questions, answers, tags, scores and accepted status. Pay per row.
Search and fetch Wikidata entities, execute SPARQL queries, and resolve external identifiers.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceWraps 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.3 npm1MIT
- FlicenseNot gradedqualityDmaintenanceProvides LLMs with tools to search Stack Overflow for programming solutions, helping ground responses in real-world code examples.-
- AlicenseAqualityCmaintenanceEnables AI assistants to search and access Stack Overflow content, including questions, answers, and error solutions.57MIT
- FlicenseNot gradedqualityDmaintenanceProvides developer tools for searching PyPI packages, fetching GitHub repository info, searching Stack Overflow, and checking Python package compatibility using public APIs with no API keys required.-
Glama MCP Gateway
Add one secure layer between your agents and this server.