@cyanheads/stackexchange-mcp-server 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +360 -0
- package/CLAUDE.md +360 -0
- package/Dockerfile +99 -0
- package/LICENSE +201 -0
- package/README.md +307 -0
- package/changelog/0.1.x/0.1.1.md +27 -0
- package/changelog/template.md +127 -0
- package/dist/config/server-config.d.ts +11 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +21 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +176 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +22 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-tag-faq.tool.d.ts +37 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-tag-faq.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-tag-faq.tool.js +118 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-tag-faq.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-thread.tool.d.ts +54 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-thread.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-thread.tool.js +205 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-thread.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-user.tool.d.ts +48 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-user.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-user.tool.js +151 -0
- package/dist/mcp-server/tools/definitions/stackexchange-get-user.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-list-sites.tool.d.ts +20 -0
- package/dist/mcp-server/tools/definitions/stackexchange-list-sites.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-list-sites.tool.js +94 -0
- package/dist/mcp-server/tools/definitions/stackexchange-list-sites.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-search-questions.tool.d.ts +45 -0
- package/dist/mcp-server/tools/definitions/stackexchange-search-questions.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/stackexchange-search-questions.tool.js +145 -0
- package/dist/mcp-server/tools/definitions/stackexchange-search-questions.tool.js.map +1 -0
- package/dist/services/stackexchange/html-normalizer.d.ts +18 -0
- package/dist/services/stackexchange/html-normalizer.d.ts.map +1 -0
- package/dist/services/stackexchange/html-normalizer.js +143 -0
- package/dist/services/stackexchange/html-normalizer.js.map +1 -0
- package/dist/services/stackexchange/stackexchange-service.d.ts +143 -0
- package/dist/services/stackexchange/stackexchange-service.d.ts.map +1 -0
- package/dist/services/stackexchange/stackexchange-service.js +336 -0
- package/dist/services/stackexchange/stackexchange-service.js.map +1 -0
- package/dist/services/stackexchange/types.d.ts +104 -0
- package/dist/services/stackexchange/types.d.ts.map +1 -0
- package/dist/services/stackexchange/types.js +7 -0
- package/dist/services/stackexchange/types.js.map +1 -0
- package/package.json +101 -0
- package/server.json +111 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Stack Exchange API v2.3 response types for raw upstream payloads.
|
|
3
|
+
* All optional fields reflect real upstream sparsity — fields may be absent entirely.
|
|
4
|
+
* @module services/stackexchange/types
|
|
5
|
+
*/
|
|
6
|
+
/** Wrapper around every SE API response. */
|
|
7
|
+
export interface SeWrapper<T> {
|
|
8
|
+
/** Seconds to wait before the next request — honor when present. */
|
|
9
|
+
backoff?: number;
|
|
10
|
+
has_more: boolean;
|
|
11
|
+
items: T[];
|
|
12
|
+
quota_max: number;
|
|
13
|
+
quota_remaining: number;
|
|
14
|
+
}
|
|
15
|
+
/** SE API error response (HTTP 400/500). */
|
|
16
|
+
export interface SeError {
|
|
17
|
+
error_id: number;
|
|
18
|
+
error_message: string;
|
|
19
|
+
error_name: string;
|
|
20
|
+
}
|
|
21
|
+
/** A Stack Exchange question (raw upstream). */
|
|
22
|
+
export interface SeQuestion {
|
|
23
|
+
accepted_answer_id?: number;
|
|
24
|
+
answer_count: number;
|
|
25
|
+
/** Present only when filter=withbody is used. */
|
|
26
|
+
body?: string;
|
|
27
|
+
creation_date?: number;
|
|
28
|
+
/** Excerpt from search results (search endpoint only). */
|
|
29
|
+
excerpt?: string;
|
|
30
|
+
is_answered: boolean;
|
|
31
|
+
last_activity_date?: number;
|
|
32
|
+
link: string;
|
|
33
|
+
owner?: SeShallowUser;
|
|
34
|
+
question_id: number;
|
|
35
|
+
score: number;
|
|
36
|
+
tags: string[];
|
|
37
|
+
title: string;
|
|
38
|
+
view_count?: number;
|
|
39
|
+
}
|
|
40
|
+
/** A Stack Exchange answer (raw upstream). */
|
|
41
|
+
export interface SeAnswer {
|
|
42
|
+
answer_id: number;
|
|
43
|
+
/** Present only when filter=withbody is used. */
|
|
44
|
+
body?: string;
|
|
45
|
+
creation_date?: number;
|
|
46
|
+
is_accepted: boolean;
|
|
47
|
+
last_activity_date?: number;
|
|
48
|
+
owner?: SeShallowUser;
|
|
49
|
+
question_id: number;
|
|
50
|
+
score: number;
|
|
51
|
+
}
|
|
52
|
+
/** Shallow user object embedded in questions/answers. */
|
|
53
|
+
export interface SeShallowUser {
|
|
54
|
+
display_name?: string;
|
|
55
|
+
link?: string;
|
|
56
|
+
reputation?: number;
|
|
57
|
+
user_id?: number;
|
|
58
|
+
user_type?: string;
|
|
59
|
+
}
|
|
60
|
+
/** Full user profile (raw upstream). */
|
|
61
|
+
export interface SeUser {
|
|
62
|
+
about_me?: string;
|
|
63
|
+
accept_rate?: number;
|
|
64
|
+
answer_count?: number;
|
|
65
|
+
badge_counts?: {
|
|
66
|
+
bronze?: number;
|
|
67
|
+
silver?: number;
|
|
68
|
+
gold?: number;
|
|
69
|
+
};
|
|
70
|
+
creation_date?: number;
|
|
71
|
+
display_name: string;
|
|
72
|
+
last_access_date?: number;
|
|
73
|
+
link: string;
|
|
74
|
+
location?: string;
|
|
75
|
+
profile_image?: string;
|
|
76
|
+
question_count?: number;
|
|
77
|
+
reputation: number;
|
|
78
|
+
user_id: number;
|
|
79
|
+
user_type?: string;
|
|
80
|
+
view_count?: number;
|
|
81
|
+
website_url?: string;
|
|
82
|
+
}
|
|
83
|
+
/** Top tag entry for a user (raw upstream). */
|
|
84
|
+
export interface SeTopTag {
|
|
85
|
+
answer_count?: number;
|
|
86
|
+
answer_score?: number;
|
|
87
|
+
question_count?: number;
|
|
88
|
+
question_score?: number;
|
|
89
|
+
tag_name: string;
|
|
90
|
+
}
|
|
91
|
+
/** Site entry from /sites endpoint (raw upstream). */
|
|
92
|
+
export interface SeSite {
|
|
93
|
+
/** The value to pass as the `site` parameter on all other endpoints. */
|
|
94
|
+
api_site_parameter: string;
|
|
95
|
+
audience?: string;
|
|
96
|
+
/** Raw icon or logo image URL. */
|
|
97
|
+
icon_url?: string;
|
|
98
|
+
launch_date?: number;
|
|
99
|
+
name: string;
|
|
100
|
+
site_state?: string;
|
|
101
|
+
site_type?: string;
|
|
102
|
+
site_url: string;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/stackexchange/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Stack Exchange API v2.3 response types for raw upstream payloads.
|
|
3
|
+
* All optional fields reflect real upstream sparsity — fields may be absent entirely.
|
|
4
|
+
* @module services/stackexchange/types
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/stackexchange/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cyanheads/stackexchange-mcp-server",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"mcpName": "io.github.cyanheads/stackexchange-mcp-server",
|
|
5
|
+
"description": "Search Stack Exchange questions, fetch complete Q&A threads as clean markdown, browse tag FAQs, and look up user profiles via MCP. STDIO or Streamable HTTP.",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"stackexchange-mcp-server": "dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"changelog/",
|
|
14
|
+
"dist/",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE",
|
|
17
|
+
"CLAUDE.md",
|
|
18
|
+
"AGENTS.md",
|
|
19
|
+
"Dockerfile",
|
|
20
|
+
"server.json"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "bun run scripts/build.ts",
|
|
24
|
+
"rebuild": "bun run scripts/clean.ts && bun run scripts/build.ts",
|
|
25
|
+
"clean": "bun run scripts/clean.ts",
|
|
26
|
+
"devcheck": "bun run scripts/devcheck.ts",
|
|
27
|
+
"audit:refresh": "rm -f bun.lock && bun install && bun audit",
|
|
28
|
+
"tree": "bun run scripts/tree.ts",
|
|
29
|
+
"list-skills": "bun run scripts/list-skills.ts",
|
|
30
|
+
"format": "biome check --write .",
|
|
31
|
+
"format:unsafe": "biome check --write --unsafe .",
|
|
32
|
+
"lint:mcp": "bun run scripts/lint-mcp.ts",
|
|
33
|
+
"lint:packaging": "bun run scripts/lint-packaging.ts",
|
|
34
|
+
"bundle": "npm run build && npx -y @anthropic-ai/mcpb pack . dist/stackexchange-mcp-server.mcpb",
|
|
35
|
+
"changelog:build": "bun run scripts/build-changelog.ts",
|
|
36
|
+
"changelog:check": "bun run scripts/build-changelog.ts --check",
|
|
37
|
+
"release:github": "bun run scripts/release-github.ts",
|
|
38
|
+
"publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"start": "node dist/index.js",
|
|
41
|
+
"start:stdio": "MCP_TRANSPORT_TYPE=stdio node dist/index.js",
|
|
42
|
+
"start:http": "MCP_TRANSPORT_TYPE=http node dist/index.js"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"stackexchange",
|
|
46
|
+
"stack-overflow",
|
|
47
|
+
"stack-exchange",
|
|
48
|
+
"qa",
|
|
49
|
+
"questions-answers",
|
|
50
|
+
"mcp",
|
|
51
|
+
"mcp-server",
|
|
52
|
+
"model-context-protocol",
|
|
53
|
+
"typescript",
|
|
54
|
+
"bun",
|
|
55
|
+
"stdio",
|
|
56
|
+
"streamable-http",
|
|
57
|
+
"ai-agent"
|
|
58
|
+
],
|
|
59
|
+
"repository": {
|
|
60
|
+
"type": "git",
|
|
61
|
+
"url": "git+https://github.com/cyanheads/stackexchange-mcp-server.git"
|
|
62
|
+
},
|
|
63
|
+
"bugs": {
|
|
64
|
+
"url": "https://github.com/cyanheads/stackexchange-mcp-server/issues"
|
|
65
|
+
},
|
|
66
|
+
"homepage": "https://github.com/cyanheads/stackexchange-mcp-server#readme",
|
|
67
|
+
"author": "cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/stackexchange-mcp-server#readme)",
|
|
68
|
+
"funding": [
|
|
69
|
+
{
|
|
70
|
+
"type": "github",
|
|
71
|
+
"url": "https://github.com/sponsors/cyanheads"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "buy_me_a_coffee",
|
|
75
|
+
"url": "https://www.buymeacoffee.com/cyanheads"
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"license": "Apache-2.0",
|
|
79
|
+
"packageManager": "bun@1.3.11",
|
|
80
|
+
"engines": {
|
|
81
|
+
"bun": ">=1.3.0",
|
|
82
|
+
"node": ">=24.0.0"
|
|
83
|
+
},
|
|
84
|
+
"publishConfig": {
|
|
85
|
+
"access": "public"
|
|
86
|
+
},
|
|
87
|
+
"dependencies": {
|
|
88
|
+
"@cyanheads/mcp-ts-core": "^0.9.21",
|
|
89
|
+
"pino-pretty": "^13.1.3",
|
|
90
|
+
"zod": "^4.4.3"
|
|
91
|
+
},
|
|
92
|
+
"devDependencies": {
|
|
93
|
+
"@biomejs/biome": "^2.4.16",
|
|
94
|
+
"@types/node": "^25.9.1",
|
|
95
|
+
"depcheck": "^1.4.7",
|
|
96
|
+
"ignore": "^7.0.5",
|
|
97
|
+
"tsc-alias": "^1.8.17",
|
|
98
|
+
"typescript": "^6.0.3",
|
|
99
|
+
"vitest": "^4.1.8"
|
|
100
|
+
}
|
|
101
|
+
}
|
package/server.json
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.cyanheads/stackexchange-mcp-server",
|
|
4
|
+
"description": "Search Stack Exchange questions, fetch Q&A threads as markdown, look up tag FAQs and user profiles.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/cyanheads/stackexchange-mcp-server",
|
|
7
|
+
"source": "github"
|
|
8
|
+
},
|
|
9
|
+
"version": "0.1.1",
|
|
10
|
+
"packages": [
|
|
11
|
+
{
|
|
12
|
+
"registryType": "npm",
|
|
13
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
14
|
+
"identifier": "@cyanheads/stackexchange-mcp-server",
|
|
15
|
+
"runtimeHint": "bun",
|
|
16
|
+
"version": "0.1.1",
|
|
17
|
+
"packageArguments": [
|
|
18
|
+
{
|
|
19
|
+
"type": "positional",
|
|
20
|
+
"value": "run"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "positional",
|
|
24
|
+
"value": "start:stdio"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"environmentVariables": [
|
|
28
|
+
{
|
|
29
|
+
"name": "STACKEXCHANGE_API_KEY",
|
|
30
|
+
"description": "Stack Exchange API key — lifts per-IP quota from ~300/day to ~10,000/day. Register at https://stackapps.com/apps/oauth/register.",
|
|
31
|
+
"format": "string",
|
|
32
|
+
"isRequired": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "MCP_LOG_LEVEL",
|
|
36
|
+
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
|
|
37
|
+
"format": "string",
|
|
38
|
+
"isRequired": false,
|
|
39
|
+
"default": "info"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"transport": {
|
|
43
|
+
"type": "stdio"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"registryType": "npm",
|
|
48
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
49
|
+
"identifier": "@cyanheads/stackexchange-mcp-server",
|
|
50
|
+
"runtimeHint": "bun",
|
|
51
|
+
"version": "0.1.1",
|
|
52
|
+
"packageArguments": [
|
|
53
|
+
{
|
|
54
|
+
"type": "positional",
|
|
55
|
+
"value": "run"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"type": "positional",
|
|
59
|
+
"value": "start:http"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"environmentVariables": [
|
|
63
|
+
{
|
|
64
|
+
"name": "STACKEXCHANGE_API_KEY",
|
|
65
|
+
"description": "Stack Exchange API key — lifts per-IP quota from ~300/day to ~10,000/day. Register at https://stackapps.com/apps/oauth/register.",
|
|
66
|
+
"format": "string",
|
|
67
|
+
"isRequired": false
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "MCP_HTTP_HOST",
|
|
71
|
+
"description": "The hostname for the HTTP server.",
|
|
72
|
+
"format": "string",
|
|
73
|
+
"isRequired": false,
|
|
74
|
+
"default": "127.0.0.1"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "MCP_HTTP_PORT",
|
|
78
|
+
"description": "The port to run the HTTP server on.",
|
|
79
|
+
"format": "string",
|
|
80
|
+
"isRequired": false,
|
|
81
|
+
"default": "3010"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "MCP_HTTP_ENDPOINT_PATH",
|
|
85
|
+
"description": "The endpoint path for the MCP server.",
|
|
86
|
+
"format": "string",
|
|
87
|
+
"isRequired": false,
|
|
88
|
+
"default": "/mcp"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "MCP_AUTH_MODE",
|
|
92
|
+
"description": "Authentication mode to use: 'none', 'jwt', or 'oauth'.",
|
|
93
|
+
"format": "string",
|
|
94
|
+
"isRequired": false,
|
|
95
|
+
"default": "none"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"name": "MCP_LOG_LEVEL",
|
|
99
|
+
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
|
|
100
|
+
"format": "string",
|
|
101
|
+
"isRequired": false,
|
|
102
|
+
"default": "info"
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"transport": {
|
|
106
|
+
"type": "streamable-http",
|
|
107
|
+
"url": "http://localhost:3010/mcp"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|