{"name":"io.github.cyanheads/hn-mcp-server","slug":"cyanheads-hn-mcp-server","title":null,"description":"Browse Hacker News feeds, threads, and user profiles with full-text search.","url":"https://mcp.market/server/cyanheads-hn-mcp-server","rating":null,"grade":"A","score":93,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":27,"stars":4,"forks":1,"downloads_week":null,"last_push_at":"2026-09-19T16:20:04.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":4,"ok":4,"last_checked_at":"2026-09-20T10:40:46.802Z","last_ok_at":"2026-09-20T10:40:46.802Z","latency_ms":264},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/cyanheads/hn-mcp-server","website":null,"version":"0.5.17","remotes":[{"type":"streamable-http","url":"https://hn.caseyjhand.com/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/hn-mcp-server","version":"0.5.17","runtimeHint":"bun","transport":{"type":"stdio"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:stdio","type":"positional"}],"environmentVariables":[{"description":"Max concurrent HTTP requests for batch item fetches (integer, 1–50).","format":"string","default":"10","name":"HN_CONCURRENCY_LIMIT"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warning').","format":"string","default":"info","name":"MCP_LOG_LEVEL"}]},{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/hn-mcp-server","version":"0.5.17","runtimeHint":"bun","transport":{"type":"streamable-http","url":"http://localhost:3010/mcp"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:http","type":"positional"}],"environmentVariables":[{"description":"Max concurrent HTTP requests for batch item fetches (integer, 1–50).","format":"string","default":"10","name":"HN_CONCURRENCY_LIMIT"},{"description":"The hostname for the HTTP server.","format":"string","default":"127.0.0.1","name":"MCP_HTTP_HOST"},{"description":"The port to run the HTTP server on.","format":"string","default":"3010","name":"MCP_HTTP_PORT"},{"description":"The endpoint path for the MCP server.","format":"string","default":"/mcp","name":"MCP_HTTP_ENDPOINT_PATH"},{"description":"Authentication mode to use: 'none', 'jwt', or 'oauth'.","format":"string","default":"none","name":"MCP_AUTH_MODE"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warning').","format":"string","default":"info","name":"MCP_LOG_LEVEL"}]}],"tools":[{"name":"hn_get_stories","description":"Fetch stories from an HN feed (top, new, best, ask, show, jobs), with title, URL, score, author, and comment count for each story.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"feed":{"type":"string","enum":["top","new","best","ask","show","jobs"],"description":"Which HN feed to fetch. \"top\" includes jobs. \"ask\" and \"show\" are Ask HN / Show HN posts."},"count":{"default":30,"description":"Number of stories to return. Larger counts take longer.","type":"integer","minimum":1,"maximum":100},"offset":{"default":0,"description":"Number of stories to skip from the start of the feed. Use with count for pagination.","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["feed"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"hn_get_thread","description":"Get an item and its comment tree as a threaded discussion, with child comments resolved recursively. Use depth 0 for an item-only lookup.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"itemId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"ID of the story, comment, or poll to fetch the thread for."},"depth":{"default":3,"description":"How many levels of replies to resolve. 0 = just the item, no comments. 1 = direct replies only. Popular stories often have more top-level comments than maxComments — to see nesting, raise maxComments together with depth, or call again with a specific comment's itemId to drill into a subtree.","type":"integer","minimum":0,"maximum":10},"maxComments":{"default":50,"description":"Maximum total comments to include across all depth levels. Highest-ranked top-level comments resolve first; replies fill in only after the level above is exhausted.","type":"integer","minimum":1,"maximum":200}},"required":["itemId"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"hn_get_user","description":"Get an HN user profile with karma, about, and optionally their most recent submissions resolved into full items.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"username":{"type":"string","minLength":1,"description":"HN username. Case-sensitive. Trimmed; blank or whitespace-only input is rejected."},"includeSubmissions":{"default":false,"description":"Resolve the user's most recent submissions into full items. Without this, only the submission count is available.","type":"boolean"},"submissionCount":{"default":10,"description":"Page size — how many submissions to resolve per call. Only used when includeSubmissions is true.","type":"integer","minimum":1,"maximum":50},"submissionOffset":{"default":0,"description":"How many submissions to skip before resolving, counting back from the most recent. Use with submissionCount to page through a long history: request offset 0, then offset submissionCount, and so on. The enrichment block echoes submissionOffset and, when more remain, the offset to send next. Only used when includeSubmissions is true.","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["username"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"hn_search_content","description":"Search Hacker News stories and comments via Algolia. Filterable by content type, author, date range, and minimum points.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Search terms. Supports simple keywords — Algolia handles stemming and relevance. Trimmed before searching; blank or whitespace-only input is rejected."},"tags":{"description":"Filter results by content type. Omit to search all types.","type":"string","enum":["story","comment","ask_hn","show_hn","front_page"]},"author":{"description":"Filter results to a specific author. Useful for finding a user's posts on a topic (hn_get_user only shows recent submissions). Trimmed before filtering; omit the field to search all authors rather than passing a blank string.","type":"string","minLength":1},"sort":{"default":"relevance","description":"Sort order. \"relevance\" for best match, \"date\" for most recent first.","type":"string","enum":["relevance","date"]},"dateRange":{"description":"Filter to a date window. Useful for finding discussions about recent events.","type":"object","properties":{"start":{"description":"Start date (ISO 8601). Results created after this date.","type":"string"},"end":{"description":"End date (ISO 8601). Results created before this date.","type":"string"}}},"minPoints":{"description":"Minimum score/points. Filters out low-engagement content.","type":"integer","minimum":0,"maximum":9007199254740991},"count":{"default":30,"description":"Number of results to return.","type":"integer","minimum":1,"maximum":50},"page":{"default":0,"description":"Page number for pagination (0-indexed).","type":"integer","minimum":0,"maximum":9007199254740991},"view":{"default":"full","description":"How much of each hit to return. \"full\" includes every field. \"compact\" omits the two body-text fields — `text` and `highlights.text` — which together can repeat a long comment twice per hit; everything else (id, title, url, domain, author, points, comment count, timestamp, parent story, title highlight, matchedWords) is unchanged. Use \"compact\" to scan many results, then pass a hit id to hn_get_thread to read the body you skipped.","type":"string","enum":["full","compact"]}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}}],"scan":{"score":93,"grade":"A","scanned_at":"2026-09-19T20:04:53.919Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:04:53.870Z","components":{"code":{"score":25,"max":25,"notes":["18 source files scanned","18 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 976ms"]},"poisoning":{"score":15,"max":15,"notes":["4 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://hn.caseyjhand.com/mcp","reachable":true,"authRequired":false,"latencyMs":976,"serverInfo":{"name":"hn-mcp-server","version":"0.5.17"}}],"packages":[{"registryType":"npm","identifier":"@cyanheads/hn-mcp-server","version":"0.5.17","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-09-19T16:21:34.346Z","repositoryUrl":"git+https://github.com/cyanheads/hn-mcp-server.git"},{"registryType":"npm","identifier":"@cyanheads/hn-mcp-server","version":"0.5.17","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-09-19T16:21:34.346Z","repositoryUrl":"git+https://github.com/cyanheads/hn-mcp-server.git"}],"repo":{"found":true,"owner":"cyanheads","repo":"hn-mcp-server","archived":false,"pushedAt":"2026-09-19T16:20:04Z","stars":4,"forks":1,"openIssues":10,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/10339515?v=4","ownerCreatedAt":"2014-12-29T13:01:12Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/10339515?v=4&s=128","source":"registry"},"presence":{"stars":4,"forks":1,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-09-19T16:20:04.000Z","score":27}}}},"grade_history":[],"reviews":[]}