stackexchange-mcp-server
Ce que fait ce MCP
Searches Stack Exchange communities and retrieves Q&A threads, tag FAQs, site metadata, and user profiles.
Outils
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['tag'], 'properties': {'tag': {'type': 'string', 'description': 'Tag to look up (e.g. "python", "javascript", "docker"). Must match exactly.'}, 'page': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page of results to return, 1-based (default 1). Page 2 with pageSize 10 returns results 11â\x80\x9320. 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': {'type': 'string', 'default': 'stackoverflow', 'description': 'Stack Exchange site â\x80\x94 use the api_site_parameter value (e.g. "stackoverflow", "superuser"). Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values.'}, 'pageSize': {'type': 'integer', 'default': 10, 'maximum': 30, 'minimum': 1, 'description': 'Number of results to return (1â\x80\x9330, default 10).'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['questions', 'tag', 'site', 'page', 'attribution', 'quotaRemaining', 'quotaMax']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The pageSize cap applied to this request.'}, 'tag': {'type': 'string', 'description': 'Tag name used for this FAQ lookup.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The 1-based page these results came from â\x80\x94 1 when the input omitted page.'}, 'site': {'type': 'string', 'description': 'Stack Exchange site api_site_parameter used for this lookup.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_site', 'invalid_parameter', 'quota_exceeded', 'paging_depth_limit', 'invalid_api_key', 'upstream_unavailable'], 'description': '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of results returned.'}, 'notice': {'type': 'string', 'description': 'Actionable guidance when results are empty or filtered.'}, 'quotaMax': {'type': 'number', 'description': 'Maximum API quota calls per day (300 keyless, ~10,000 with API key).'}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['questionId', 'title', 'link', 'score', 'answerCount', 'isAnswered', 'tags'], 'properties': {'link': {'type': 'string', 'description': 'Direct URL to the question.'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'description': 'A tag applied to this question.'}, 'description': 'Tags applied to this question.'}, 'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Question score (upvotes minus downvotes).'}, 'title': {'type': 'string', 'description': 'Question title.'}, 'isAnswered': {'type': 'boolean', 'description': 'True when the question has an accepted answer or at least one positively-scored answer.'}, 'questionId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Question ID â\x80\x94 pass to stackexchange_get_thread to fetch the full thread.'}, 'answerCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total number of answers.'}, 'creationDate': {'type': 'string', 'description': 'ISO 8601 timestamp of when the question was asked â\x80\x94 use it to judge whether the advice is still current.'}, 'lastActivityDate': {'type': 'string', 'description': 'ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).'}}, 'description': 'A Stack Exchange FAQ question with score, answer count, tags, and dates.', 'additionalProperties': False}, 'description': 'Highest-voted answered questions for the specified tag, ordered by votes.'}, 'truncated': {'type': 'boolean', 'description': 'True when results were capped at pageSize.'}, 'attribution': {'type': 'string', 'description': 'Content license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution.'}, 'quotaRemaining': {'type': 'number', 'description': 'Remaining API quota calls for the current day.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['questionIdOrUrl'], 'properties': {'site': {'type': 'string', 'default': 'stackoverflow', 'description': 'Stack Exchange site â\x80\x94 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.'}, 'maxAnswers': {'type': 'integer', 'default': 10, 'maximum': 100, 'minimum': 1, 'description': 'Maximum number of answers to include (1â\x80\x93100, default 10). Answers are sorted: accepted first, then by score.'}, 'includeComments': {'type': 'boolean', '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.'}, 'questionIdOrUrl': {'type': 'string', 'description': '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.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['questionId', 'title', 'link', 'score', 'tags', 'bodyMarkdown', 'answers', 'quotaRemaining', 'quotaMax']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The maxAnswers cap applied to this request.'}, 'link': {'type': 'string', 'description': 'Direct URL to the question.'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'description': 'A tag applied to this question.'}, 'description': 'Tags applied to this question.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['question_not_found', 'invalid_site', 'invalid_id_or_url', 'invalid_parameter', 'quota_exceeded', 'invalid_api_key', 'upstream_unavailable'], 'description': 'Machine-readable failure mode. Declared by this tool: `question_not_found`: The question lookup returns an empty result set â\x80\x94 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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Question score (upvotes minus downvotes).'}, 'shown': {'type': 'number', 'description': 'Number of answers returned.'}, 'title': {'type': 'string', 'description': 'Question title.'}, 'answers': {'type': 'array', 'items': {'type': 'object', 'required': ['answerId', 'score', 'isAccepted', 'bodyMarkdown'], 'properties': {'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Answer score (upvotes minus downvotes).'}, 'answerId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Numeric answer ID.'}, 'comments': {'type': 'array', 'items': {'type': 'object', 'required': ['commentId', 'score', 'bodyMarkdown'], 'properties': {'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Comment score â\x80\x94 comments can score below zero.'}, 'commentId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Numeric comment ID.'}, 'authorLink': {'type': 'string', 'description': 'Comment author profile URL when available.'}, 'authorName': {'type': 'string', 'description': 'Comment author display name when available.'}, 'bodyMarkdown': {'type': 'string', 'description': 'Comment body normalized from HTML to markdown.'}, 'creationDate': {'type': 'string', 'description': 'ISO 8601 timestamp of when the comment was posted â\x80\x94 the newest comments carry the freshest corrections.'}}, 'description': 'A single comment with markdown body, score, date, and author attribution.', 'additionalProperties': False}, '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 â\x80\x94 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".'}, 'authorLink': {'type': 'string', 'description': 'Answer author profile URL when available.'}, 'authorName': {'type': 'string', 'description': 'Answer author display name when available.'}, 'isAccepted': {'type': 'boolean', 'description': 'True when this is the accepted answer.'}, 'authorUserId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Answer author numeric user ID when available â\x80\x94 pass to stackexchange_get_user to fetch the full profile.'}, 'bodyMarkdown': {'type': 'string', 'description': 'Answer body normalized from HTML to markdown.'}, 'creationDate': {'type': 'string', 'description': 'ISO 8601 timestamp of when the answer was posted â\x80\x94 an old answer may predate the current API.'}, 'authorReputation': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Answer author reputation when available.'}, 'lastActivityDate': {'type': 'string', 'description': 'ISO 8601 timestamp of the most recent edit or activity on the answer.'}, 'commentsTruncated': {'type': 'boolean', 'description': "True when this answer's comments[] is a partial list â\x80\x94 more exist upstream than were returned."}}, 'description': 'A single Q&A answer with markdown body, score, dates, and author attribution.', 'additionalProperties': False}, 'description': 'Answers sorted: accepted answer first, then by score descending.'}, 'comments': {'type': 'array', 'items': {'type': 'object', 'required': ['commentId', 'score', 'bodyMarkdown'], 'properties': {'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Comment score â\x80\x94 comments can score below zero.'}, 'commentId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Numeric comment ID.'}, 'authorLink': {'type': 'string', 'description': 'Comment author profile URL when available.'}, 'authorName': {'type': 'string', 'description': 'Comment author display name when available.'}, 'bodyMarkdown': {'type': 'string', 'description': 'Comment body normalized from HTML to markdown.'}, 'creationDate': {'type': 'string', 'description': 'ISO 8601 timestamp of when the comment was posted â\x80\x94 the newest comments carry the freshest corrections.'}}, 'description': 'A single comment with markdown body, score, date, and author attribution.', 'additionalProperties': False}, '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 â\x80\x94 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': {'type': 'number', 'description': 'Maximum API quota calls per day (300 keyless, ~10,000 with API key).'}, 'truncated': {'type': 'boolean', 'description': 'True when answers were capped at maxAnswers.'}, 'authorLink': {'type': 'string', 'description': 'Question author profile URL when available.'}, 'authorName': {'type': 'string', 'description': 'Question author display name when available.'}, 'questionId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Numeric question ID â\x80\x94 identifies this thread on the site.'}, 'answerCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total answers the question has upstream. When greater than the returned answers[] length, more answers exist â\x80\x94 raise maxAnswers to fetch them.'}, 'commentsCap': {'type': 'number', 'description': 'Maximum comments carried per post â\x80\x94 a post at this count reports commentsTruncated.'}, 'authorUserId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Question author numeric user ID when available â\x80\x94 pass to stackexchange_get_user to fetch the full profile.'}, 'bodyMarkdown': {'type': 'string', 'description': 'Question body normalized from HTML to markdown.'}, 'creationDate': {'type': 'string', 'description': 'ISO 8601 timestamp of when the question was asked â\x80\x94 use it to judge whether the advice is still current.'}, 'quotaRemaining': {'type': 'number', 'description': 'Remaining API quota calls for the current day.'}, 'acceptedAnswerId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'ID of the accepted answer when one exists.'}, 'lastActivityDate': {'type': 'string', 'description': 'ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).'}, 'commentsTruncated': {'type': 'boolean', 'description': "True when the question's comments[] is a partial list â\x80\x94 more exist upstream than were returned."}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['userId'], 'properties': {'site': {'type': 'string', 'default': 'stackoverflow', 'description': 'Stack Exchange site â\x80\x94 use the api_site_parameter value (e.g. "stackoverflow", "superuser"). Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values.'}, 'userId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Numeric user ID (at most 2147483647) â\x80\x94 use the authorUserId field from a question or answer in stackexchange_get_thread output.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['userId', 'displayName', 'link', 'reputation', 'topTags', 'quotaRemaining', 'quotaMax']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'link': {'type': 'string', 'description': 'Direct URL to the user profile.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['user_not_found', 'invalid_user_id', 'invalid_site', 'invalid_parameter', 'quota_exceeded', 'invalid_api_key', 'upstream_unavailable'], 'description': 'Machine-readable failure mode. Declared by this tool: `user_not_found`: The user lookup returns an empty result set â\x80\x94 SE returns HTTP 200 with no items for unknown user IDs rather than 404. `invalid_user_id`: userId is above 2147483647 â\x80\x94 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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'userId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Numeric user ID on this Stack Exchange site.'}, 'topTags': {'type': 'array', 'items': {'type': 'object', 'required': ['tagName'], 'properties': {'tagName': {'type': 'string', 'description': 'Tag name.'}, 'answerCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Number of answers in this tag.'}, 'answerScore': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total answer score in this tag.'}}, 'description': 'A tag the user has answered in, with answer count and score.', 'additionalProperties': False}, 'description': 'Top tags by answer score (up to 10). Empty array for new users with no answers.'}, 'location': {'type': 'string', 'description': 'User-provided location string when available.'}, 'quotaMax': {'type': 'number', 'description': 'Maximum API quota calls per day (300 keyless, ~10,000 with API key).'}, 'reputation': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'User reputation score.'}, 'websiteUrl': {'type': 'string', 'description': 'User-provided website URL when available.'}, 'answerCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total number of answers posted when provided by the API.'}, 'badgeCounts': {'type': 'object', 'properties': {'gold': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Number of gold badges.'}, 'bronze': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Number of bronze badges.'}, 'silver': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Number of silver badges.'}}, 'description': 'Badge counts when provided by the API.', 'additionalProperties': False}, 'displayName': {'type': 'string', 'description': 'Display name shown on the site.'}, 'creationDate': {'type': 'string', 'description': 'ISO 8601 timestamp of when the account was created â\x80\x94 the account age.'}, 'questionCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total number of questions posted when provided by the API.'}, 'lastAccessDate': {'type': 'string', 'description': 'ISO 8601 timestamp of the last time the user accessed the site â\x80\x94 a stale value means the author is unlikely to respond.'}, 'quotaRemaining': {'type': 'number', 'description': 'Remaining API quota calls for the current day.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'filter': {'type': 'string', 'description': 'Optional case-insensitive name filter â\x80\x94 returns only sites whose name contains all provided tokens. Omit to return all sites.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['sites', 'totalCount', 'quotaRemaining', 'quotaMax']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['quota_exceeded', 'invalid_parameter', 'invalid_api_key', 'upstream_unavailable'], 'description': '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'sites': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'apiSiteParameter', 'siteUrl'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable site name (e.g. "Stack Overflow").'}, 'siteUrl': {'type': 'string', 'description': 'Public URL of the site.'}, 'audience': {'type': 'string', 'description': 'Intended audience description when provided by the API.'}, 'apiSiteParameter': {'type': 'string', 'description': 'Value to pass as the `site` parameter on all other stackexchange_* tools (e.g. "stackoverflow").'}}, 'description': 'A Stack Exchange network site entry.', 'additionalProperties': False}, 'description': 'Stack Exchange network sites matching the optional name filter.'}, 'notice': {'type': 'string', 'description': 'Actionable guidance when results are empty or filtered.'}, 'quotaMax': {'type': 'number', 'description': 'Maximum API quota calls per day (300 keyless, ~10,000 with API key).'}, 'totalCount': {'type': 'number', 'description': 'Total number of sites returned after filtering.'}, 'quotaRemaining': {'type': 'number', 'description': 'Remaining API quota calls for the current day.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['query'], 'properties': {'page': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page of results to return, 1-based (default 1). Page 2 with pageSize 10 returns results 11â\x80\x9320. 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': {'type': 'string', 'default': 'stackoverflow', 'description': 'Stack Exchange site to search â\x80\x94 use the api_site_parameter value (e.g. "stackoverflow", "superuser", "serverfault"). Defaults to "stackoverflow". Call stackexchange_list_sites to discover valid values.'}, 'sort': {'enum': ['relevance', 'votes', 'activity', 'newest'], 'type': 'string', 'default': 'relevance', 'description': 'Result ordering: "relevance" (default, best match), "votes" (highest score first), "activity" (most recently active), "newest" (most recently created).'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'description': 'A single tag to filter by (e.g. "python", "async").'}, 'description': 'Filter results to questions with all specified tags.'}, 'query': {'type': 'string', 'description': 'Full-text search query (e.g. "python async generator send value").'}, 'minScore': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Minimum question score â\x80\x94 excludes questions with lower scores. Setting minScore orders results by score (votes), which may differ from the requested sort.'}, 'pageSize': {'type': 'integer', 'default': 10, 'maximum': 30, 'minimum': 1, 'description': 'Number of results to return (1â\x80\x9330, default 10).'}, 'acceptedOnly': {'type': 'boolean', 'description': 'When true, return only questions that have an accepted answer.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['questions', 'page', 'attribution', 'quotaRemaining', 'quotaMax']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The pageSize cap applied to this request.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The 1-based page these results came from â\x80\x94 1 when the input omitted page.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_site', 'invalid_parameter', 'quota_exceeded', 'paging_depth_limit', 'invalid_api_key', 'upstream_unavailable'], 'description': '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of results returned.'}, 'notice': {'type': 'string', 'description': 'Actionable guidance when results are empty or filtered.'}, 'quotaMax': {'type': 'number', 'description': 'Maximum API quota calls per day (300 keyless, ~10,000 with API key).'}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['questionId', 'title', 'link', 'score', 'answerCount', 'isAnswered', 'tags'], 'properties': {'link': {'type': 'string', 'description': 'Direct URL to the question.'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'description': 'A tag applied to this question.'}, 'description': 'Tags applied to this question.'}, 'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Question score (upvotes minus downvotes).'}, 'title': {'type': 'string', 'description': 'Question title.'}, 'excerpt': {'type': 'string', 'description': 'Opening prose of the question body, trimmed to roughly 300 characters and ending in "â\x80¦" when cut. Code blocks and markdown structure are omitted; absent when the question body is nothing but code.'}, 'isAnswered': {'type': 'boolean', 'description': 'True when the question has an accepted answer or at least one positively-scored answer.'}, 'questionId': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Question ID â\x80\x94 pass to stackexchange_get_thread to fetch the full thread.'}, 'answerCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total number of answers.'}, 'creationDate': {'type': 'string', 'description': 'ISO 8601 timestamp of when the question was asked â\x80\x94 use it to judge whether the advice is still current.'}, 'lastActivityDate': {'type': 'string', 'description': 'ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).'}}, 'description': 'A Stack Exchange question with score, answer count, tags, dates, and optional excerpt.', 'additionalProperties': False}, 'description': 'Questions matching the search query, ordered by the specified sort.'}, 'truncated': {'type': 'boolean', 'description': 'True when results were capped at pageSize.'}, 'attribution': {'type': 'string', 'description': 'Content license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution.'}, 'quotaRemaining': {'type': 'number', 'description': 'Remaining API quota calls for the current day.'}}, 'additionalProperties': False}
Modifications récentes des outils
Serveurs MCP similaires
concordance
Provides deterministic claim verification and audit receipts, along with Bible references, commentary, geography, indexed knowled…
canton-ccpedia
Searches and explains Canton Network and Daml documentation, governance proposals, forums, code examples, APIs, releases, and eco…
BNM Data Shop
Sells access to cached official reports, enforcement orders, regulatory documents, inspection records, and other public-source te…
api-evangelist
Provides API governance analysis, OpenAPI overlays and version diffs, security-sensitive field classification, code samples, matu…
OpenHelvetia Gateway
Provides sourced access to Swiss federal legislation and political data, including law metadata, versions, amendments, citations,…
website-search
Provides security article search and structured guidance, templates, frameworks, and review criteria for incident response, threa…
The Ainglish Project
Maintains a measured, auditable register of language constructs, proposals, evidence, adoption, contributors, protocols, and rati…
Torah Library
Provides searchable Jewish texts, commentaries, source sheets, dictionaries, manuscripts, calendars, learning schedules, parasha …