Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,551Letters: 14Defects: 1,323counted 3 min ago
teppi

Server definition

Hash
sha256:09238f9445f39fc0c3e7294d0a97c09640a2d564d9d33efca67bd7376f8b7789
What it is
What a remote MCP server returned when asked what it offers: 5 tools

The blob, as servednamed by its sha256

{ "instructions": "Use stackexchange_list_sites to find a community, then stackexchange_search_questions or stackexchange_get_tag_faq to discover question IDs. Read full Q&A content with stackexchange_get_thread, and pass an authorUserId to stackexchange_get_user for author context.", "tools": [ { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "page": { "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" }, "pageSize": { "default": 10, "description": "Number of results to return (1–30, default 10).", "maximum": 30, "minimum": 1, "type": "integer" }, "site": { "default": "stackoverflow", "description": "Stack Exchange site — use the api_site_parameter value (e.g. \"stackoverflow\", \"superuser\"). Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values.", "type": "string" }, "tag": { "description": "Tag to look up (e.g. \"python\", \"javascript\", \"docker\"). Must match exactly.", "type": "string" } }, "required": [ "tag" ], "type": "object" }, "name": "stackexchange_get_tag_faq", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "questions", "tag", "site", "page", "attribution", "quotaRemaining", "quotaMax" ] }, { "required": [ "error" ] } ], "properties": { "attribution": { "description": "Content license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution.", "type": "string" }, "cap": { "description": "The pageSize cap applied to this request.", "type": "number" }, "error": { "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. `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.", "examples": [ "invalid_site", "invalid_parameter", "quota_exceeded", "paging_depth_limit", "invalid_api_key", "upstream_unavailable" ], "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" }, "notice": { "description": "Actionable guidance when results are empty or filtered.", "type": "string" }, "page": { "description": "The 1-based page these results came from — 1 when the input omitted page.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "questions": { "description": "Highest-voted answered questions for the specified tag, ordered by votes.", "items": { "additionalProperties": false, "description": "A Stack Exchange FAQ question with score, answer count, tags, and dates.", "properties": { "answerCount": { "description": "Total number of answers.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "creationDate": { "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.", "type": "string" }, "isAnswered": { "description": "True when the question has an accepted answer or at least one positively-scored answer.", "type": "boolean" }, "lastActivityDate": { "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).", "type": "string" }, "link": { "description": "Direct URL to the question.", "type": "string" }, "questionId": { "description": "Question ID — pass to stackexchange_get_thread to fetch the full thread.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "score": { "description": "Question score (upvotes minus downvotes).", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "tags": { "description": "Tags applied to this question.", "items": { "description": "A tag applied to this question.", "type": "string" }, "type": "array" }, "title": { "description": "Question title.", "type": "string" } }, "required": [ "questionId", "title", "link", "score", "answerCount", "isAnswered", "tags" ], "type": "object" }, "type": "array" }, "quotaMax": { "description": "Maximum API quota calls per day (300 keyless, ~10,000 with API key).", "type": "number" }, "quotaRemaining": { "description": "Remaining API quota calls for the current day.", "type": "number" }, "shown": { "description": "Number of results returned.", "type": "number" }, "site": { "description": "Stack Exchange site api_site_parameter used for this lookup.", "type": "string" }, "tag": { "description": "Tag name used for this FAQ lookup.", "type": "string" }, "truncated": { "description": "True when results were capped at pageSize.", "type": "boolean" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "includeComments": { "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" }, "maxAnswers": { "default": 10, "description": "Maximum number of answers to include (1–100, default 10). Answers are sorted: accepted first, then by score.", "maximum": 100, "minimum": 1, "type": "integer" }, "questionIdOrUrl": { "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.", "type": "string" }, "site": { "default": "stackoverflow", "description": "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.", "type": "string" } }, "required": [ "questionIdOrUrl" ], "type": "object" }, "name": "stackexchange_get_thread", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "questionId", "title", "link", "score", "tags", "bodyMarkdown", "answers", "quotaRemaining", "quotaMax" ] }, { "required": [ "error" ] } ], "properties": { "acceptedAnswerId": { "description": "ID of the accepted answer when one exists.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "answerCount": { "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" }, "answers": { "description": "Answers sorted: accepted answer first, then by score descending.", "items": { "additionalProperties": false, "description": "A single Q&A answer with markdown body, score, dates, and author attribution.", "properties": { "answerId": { "description": "Numeric answer ID.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "authorLink": { "description": "Answer author profile URL when available.", "type": "string" }, "authorName": { "description": "Answer author display name when available.", "type": "string" }, "authorReputation": { "description": "Answer author reputation when available.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "authorUserId": { "description": "Answer author numeric user ID when available — pass to stackexchange_get_user to fetch the full profile.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "bodyMarkdown": { "description": "Answer body normalized from HTML to markdown.", "type": "string" }, "comments": { "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" }, "commentsTruncated": { "description": "True when this answer's comments[] is a partial list — more exist upstream than were returned.", "type": "boolean" }, "creationDate": { "description": "ISO 8601 timestamp of when the answer was posted — an old answer may predate the current API.", "type": "string" }, "isAccepted": { "description": "True when this is the accepted answer.", "type": "boolean" }, "lastActivityDate": { "description": "ISO 8601 timestamp of the most recent edit or activity on the answer.", "type": "string" }, "score": { "description": "Answer score (upvotes minus downvotes).", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" } }, "required": [ "answerId", "score", "isAccepted", "bodyMarkdown" ], "type": "object" }, "type": "array" }, "authorLink": { "description": "Question author profile URL when available.", "type": "string" }, "authorName": { "description": "Question author display name when available.", "type": "string" }, "authorUserId": { "description": "Question author numeric user ID when available — pass to stackexchange_get_user to fetch the full profile.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "bodyMarkdown": { "description": "Question body normalized from HTML to markdown.", "type": "string" }, "cap": { "description": "The maxAnswers cap applied to this request.", "type": "number" }, "comments": { "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" }, "commentsCap": { "description": "Maximum comments carried per post — a post at this count reports commentsTruncated.", "type": "number" }, "commentsTruncated": { "description": "True when the question's comments[] is a partial list — more exist upstream than were returned.", "type": "boolean" }, "creationDate": { "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.", "type": "string" }, "error": { "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. `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.", "examples": [ "question_not_found", "invalid_site", "invalid_id_or_url", "invalid_parameter", "quota_exceeded", "invalid_api_key", "upstream_unavailable" ], "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" }, "lastActivityDate": { "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).", "type": "string" }, "link": { "description": "Direct URL to the question.", "type": "string" }, "questionId": { "description": "Numeric question ID — identifies this thread on the site.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "quotaMax": { "description": "Maximum API quota calls per day (300 keyless, ~10,000 with API key).", "type": "number" }, "quotaRemaining": { "description": "Remaining API quota calls for the current day.", "type": "number" }, "score": { "description": "Question score (upvotes minus downvotes).", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "shown": { "description": "Number of answers returned.", "type": "number" }, "tags": { "description": "Tags applied to this question.", "items": { "description": "A tag applied to this question.", "type": "string" }, "type": "array" }, "title": { "description": "Question title.", "type": "string" }, "truncated": { "description": "True when answers were capped at maxAnswers.", "type": "boolean" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "site": { "default": "stackoverflow", "description": "Stack Exchange site — use the api_site_parameter value (e.g. \"stackoverflow\", \"superuser\"). Defaults to \"stackoverflow\". Call stackexchange_list_sites to discover valid values.", "type": "string" }, "userId": { "description": "Numeric user ID (at most 2147483647) — use the authorUserId field from a question or answer in stackexchange_get_thread output.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" } }, "required": [ "userId" ], "type": "object" }, "name": "stackexchange_get_user", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "userId", "displayName", "link", "reputation", "topTags", "quotaRemaining", "quotaMax" ] }, { "required": [ "error" ] } ], "properties": { "answerCount": { "description": "Total number of answers posted when provided by the API.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "badgeCounts": { "additionalProperties": false, "description": "Badge counts when provided by the API.", "properties": { "bronze": { "description": "Number of bronze badges.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "gold": { "description": "Number of gold badges.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "silver": { "description": "Number of silver badges.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" } }, "type": "object" }, "creationDate": { "description": "ISO 8601 timestamp of when the account was created — the account age.", "type": "string" }, "displayName": { "description": "Display name shown on the site.", "type": "string" }, "error": { "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_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.", "examples": [ "user_not_found", "invalid_user_id", "invalid_site", "invalid_parameter", "quota_exceeded", "invalid_api_key", "upstream_unavailable" ], "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" }, "lastAccessDate": { "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" }, "link": { "description": "Direct URL to the user profile.", "type": "string" }, "location": { "description": "User-provided location string when available.", "type": "string" }, "questionCount": { "description": "Total number of questions posted when provided by the API.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "quotaMax": { "description": "Maximum API quota calls per day (300 keyless, ~10,000 with API key).", "type": "number" }, "quotaRemaining": { "description": "Remaining API quota calls for the current day.", "type": "number" }, "reputation": { "description": "User reputation score.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "topTags": { "description": "Top tags by answer score (up to 10). Empty array for new users with no answers.", "items": { "additionalProperties": false, "description": "A tag the user has answered in, with answer count and score.", "properties": { "answerCount": { "description": "Number of answers in this tag.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "answerScore": { "description": "Total answer score in this tag.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "tagName": { "description": "Tag name.", "type": "string" } }, "required": [ "tagName" ], "type": "object" }, "type": "array" }, "userId": { "description": "Numeric user ID on this Stack Exchange site.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "websiteUrl": { "description": "User-provided website URL when available.", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "filter": { "description": "Optional case-insensitive name filter — returns only sites whose name contains all provided tokens. Omit to return all sites.", "type": "string" } }, "type": "object" }, "name": "stackexchange_list_sites", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "sites", "totalCount", "quotaRemaining", "quotaMax" ] }, { "required": [ "error" ] } ], "properties": { "error": { "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: `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.", "examples": [ "quota_exceeded", "invalid_parameter", "invalid_api_key", "upstream_unavailable" ], "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" }, "notice": { "description": "Actionable guidance when results are empty or filtered.", "type": "string" }, "quotaMax": { "description": "Maximum API quota calls per day (300 keyless, ~10,000 with API key).", "type": "number" }, "quotaRemaining": { "description": "Remaining API quota calls for the current day.", "type": "number" }, "sites": { "description": "Stack Exchange network sites matching the optional name filter.", "items": { "additionalProperties": false, "description": "A Stack Exchange network site entry.", "properties": { "apiSiteParameter": { "description": "Value to pass as the `site` parameter on all other stackexchange_* tools (e.g. \"stackoverflow\").", "type": "string" }, "audience": { "description": "Intended audience description when provided by the API.", "type": "string" }, "name": { "description": "Human-readable site name (e.g. \"Stack Overflow\").", "type": "string" }, "siteUrl": { "description": "Public URL of the site.", "type": "string" } }, "required": [ "name", "apiSiteParameter", "siteUrl" ], "type": "object" }, "type": "array" }, "totalCount": { "description": "Total number of sites returned after filtering.", "type": "number" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "acceptedOnly": { "description": "When true, return only questions that have an accepted answer.", "type": "boolean" }, "minScore": { "description": "Minimum question score — excludes questions with lower scores. Setting minScore orders results by score (votes), which may differ from the requested sort.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "page": { "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" }, "pageSize": { "default": 10, "description": "Number of results to return (1–30, default 10).", "maximum": 30, "minimum": 1, "type": "integer" }, "query": { "description": "Full-text search query (e.g. \"python async generator send value\").", "type": "string" }, "site": { "default": "stackoverflow", "description": "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.", "type": "string" }, "sort": { "default": "relevance", "description": "Result ordering: \"relevance\" (default, best match), \"votes\" (highest score first), \"activity\" (most recently active), \"newest\" (most recently created).", "enum": [ "relevance", "votes", "activity", "newest" ], "type": "string" }, "tags": { "description": "Filter results to questions with all specified tags.", "items": { "description": "A single tag to filter by (e.g. \"python\", \"async\").", "type": "string" }, "type": "array" } }, "required": [ "query" ], "type": "object" }, "name": "stackexchange_search_questions", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "questions", "page", "attribution", "quotaRemaining", "quotaMax" ] }, { "required": [ "error" ] } ], "properties": { "attribution": { "description": "Content license notice. Stack Exchange content is licensed under CC BY-SA 4.0 and requires attribution.", "type": "string" }, "cap": { "description": "The pageSize cap applied to this request.", "type": "number" }, "error": { "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. `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.", "examples": [ "invalid_site", "invalid_parameter", "quota_exceeded", "paging_depth_limit", "invalid_api_key", "upstream_unavailable" ], "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" }, "notice": { "description": "Actionable guidance when results are empty or filtered.", "type": "string" }, "page": { "description": "The 1-based page these results came from — 1 when the input omitted page.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "questions": { "description": "Questions matching the search query, ordered by the specified sort.", "items": { "additionalProperties": false, "description": "A Stack Exchange question with score, answer count, tags, dates, and optional excerpt.", "properties": { "answerCount": { "description": "Total number of answers.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "creationDate": { "description": "ISO 8601 timestamp of when the question was asked — use it to judge whether the advice is still current.", "type": "string" }, "excerpt": { "description": "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.", "type": "string" }, "isAnswered": { "description": "True when the question has an accepted answer or at least one positively-scored answer.", "type": "boolean" }, "lastActivityDate": { "description": "ISO 8601 timestamp of the most recent activity on the question (edit, answer, or comment).", "type": "string" }, "link": { "description": "Direct URL to the question.", "type": "string" }, "questionId": { "description": "Question ID — pass to stackexchange_get_thread to fetch the full thread.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "score": { "description": "Question score (upvotes minus downvotes).", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "tags": { "description": "Tags applied to this question.", "items": { "description": "A tag applied to this question.", "type": "string" }, "type": "array" }, "title": { "description": "Question title.", "type": "string" } }, "required": [ "questionId", "title", "link", "score", "answerCount", "isAnswered", "tags" ], "type": "object" }, "type": "array" }, "quotaMax": { "description": "Maximum API quota calls per day (300 keyless, ~10,000 with API key).", "type": "number" }, "quotaRemaining": { "description": "Remaining API quota calls for the current day.", "type": "number" }, "shown": { "description": "Number of results returned.", "type": "number" }, "truncated": { "description": "True when results were capped at pageSize.", "type": "boolean" } }, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:09238f9445f39fc0c3e7294d0a97c09640a2d564d9d33efca67bd7376f8b7789 | sha256sum