agentforge-mcp 0.1.0
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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +175 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 sciscale studio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# agentforge-mcp
|
|
2
|
+
|
|
3
|
+
**Stop re-explaining what you want.** An MCP server that turns a rough,
|
|
4
|
+
one-line coding request into a structured, tool-tuned prompt — so your AI
|
|
5
|
+
coding agent gets it right the first time.
|
|
6
|
+
|
|
7
|
+
It's a thin client for [AgentForge](https://agentforge.sciscale.org): it
|
|
8
|
+
forwards your request to the hosted engine, which extracts the real
|
|
9
|
+
requirements, catches the edge cases you didn't mention, formats the prompt
|
|
10
|
+
for your specific agent, and quality-checks it before handing it back.
|
|
11
|
+
|
|
12
|
+
No engine logic runs locally — this package is a ~150-line forwarder. The work
|
|
13
|
+
happens server-side, so it stays current without you updating anything.
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
17
|
+
### 1. Get an API key
|
|
18
|
+
|
|
19
|
+
Sign in at [agentforge.sciscale.org](https://agentforge.sciscale.org), open
|
|
20
|
+
**API keys**, and create one. Free accounts get 3 refinements/day; Pro is
|
|
21
|
+
unlimited. The key is shown once — copy it.
|
|
22
|
+
|
|
23
|
+
### 2. Add the server to your coding agent
|
|
24
|
+
|
|
25
|
+
The server runs via `npx` — nothing to install or build.
|
|
26
|
+
|
|
27
|
+
**Claude Code:**
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
claude mcp add agentforge --env AGENTFORGE_API_KEY=af_your_key_here -- npx -y agentforge-mcp
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Cursor / Windsurf / Claude Desktop** — add to your MCP config
|
|
34
|
+
(`~/.cursor/mcp.json`, `~/.codeium/windsurf/mcp_config.json`, etc.):
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"mcpServers": {
|
|
39
|
+
"agentforge": {
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "agentforge-mcp"],
|
|
42
|
+
"env": { "AGENTFORGE_API_KEY": "af_your_key_here" }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## The tool
|
|
49
|
+
|
|
50
|
+
### `agentforge_refine_prompt`
|
|
51
|
+
|
|
52
|
+
Turns a plain-language request into a refined prompt.
|
|
53
|
+
|
|
54
|
+
| Argument | Type | Default | Notes |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| `request` | string | — | The coding task, in plain language (1–4000 chars). Rough is fine. |
|
|
57
|
+
| `target_tool` | string | `claude-code` | `claude-code`, `codex`, `cursor`, `aider`, `continue`, `windsurf`, `kimi`, `generic` |
|
|
58
|
+
| `style` | string | `plan-first` | `plan-first`, `direct-edit`, `explore-first` |
|
|
59
|
+
|
|
60
|
+
Returns the refined prompt as text. The structured result also includes the
|
|
61
|
+
account `tier`, the Quality Engine `quality` score, and today's `usage`.
|
|
62
|
+
|
|
63
|
+
Once configured, just ask your agent — e.g. *"refine this with AgentForge: add
|
|
64
|
+
a dark mode toggle that persists, then implement it."*
|
|
65
|
+
|
|
66
|
+
## Configuration
|
|
67
|
+
|
|
68
|
+
| Variable | Default | Purpose |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| `AGENTFORGE_API_KEY` | — | **Required.** Your API key. |
|
|
71
|
+
| `AGENTFORGE_API_URL` | `https://agentforge.sciscale.org/api/v1/refine` | Override the endpoint (rarely needed). |
|
|
72
|
+
|
|
73
|
+
## Develop
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
npm install
|
|
77
|
+
npm run build # tsc -> dist/
|
|
78
|
+
node dist/index.js # runs on stdio
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## License
|
|
82
|
+
|
|
83
|
+
MIT — see [LICENSE](./LICENSE). A project of [sciscale studio](https://wow.sciscale.org).
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* agentforge-mcp — MCP server for AgentForge.
|
|
4
|
+
*
|
|
5
|
+
* A thin stdio MCP server exposing one tool, `agentforge_refine_prompt`, which
|
|
6
|
+
* forwards a plain-language coding request to the AgentForge HTTP API
|
|
7
|
+
* (POST /api/v1/refine) and returns a tool-tuned, quality-checked prompt.
|
|
8
|
+
*
|
|
9
|
+
* No engine logic lives here — AgentForge's backend does the work. This is a
|
|
10
|
+
* pure forwarder. Get an API key at https://agentforge.sciscale.org/account/keys
|
|
11
|
+
* and pass it via the AGENTFORGE_API_KEY environment variable.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* agentforge-mcp — MCP server for AgentForge.
|
|
4
|
+
*
|
|
5
|
+
* A thin stdio MCP server exposing one tool, `agentforge_refine_prompt`, which
|
|
6
|
+
* forwards a plain-language coding request to the AgentForge HTTP API
|
|
7
|
+
* (POST /api/v1/refine) and returns a tool-tuned, quality-checked prompt.
|
|
8
|
+
*
|
|
9
|
+
* No engine logic lives here — AgentForge's backend does the work. This is a
|
|
10
|
+
* pure forwarder. Get an API key at https://agentforge.sciscale.org/account/keys
|
|
11
|
+
* and pass it via the AGENTFORGE_API_KEY environment variable.
|
|
12
|
+
*/
|
|
13
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
14
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
const API_URL = process.env.AGENTFORGE_API_URL ?? "https://agentforge.sciscale.org/api/v1/refine";
|
|
17
|
+
const API_KEY = process.env.AGENTFORGE_API_KEY ?? "";
|
|
18
|
+
// Pro-tier iterative refinement can run several audit passes — allow for it.
|
|
19
|
+
const REQUEST_TIMEOUT_MS = 180_000;
|
|
20
|
+
// Mirror the values the AgentForge backend accepts (app/prompt_builder.py).
|
|
21
|
+
const TARGET_TOOLS = [
|
|
22
|
+
"claude-code", "codex", "cursor", "aider",
|
|
23
|
+
"continue", "windsurf", "kimi", "generic",
|
|
24
|
+
];
|
|
25
|
+
const STYLES = ["plan-first", "direct-edit", "explore-first"];
|
|
26
|
+
const inputSchema = {
|
|
27
|
+
request: z.string()
|
|
28
|
+
.min(1, "request must not be empty")
|
|
29
|
+
.max(4000, "request must not exceed 4000 characters")
|
|
30
|
+
.describe("The coding task or feature request, in plain language. Rough and " +
|
|
31
|
+
"under-specified is fine — that is exactly what gets refined."),
|
|
32
|
+
target_tool: z.enum(TARGET_TOOLS)
|
|
33
|
+
.default("claude-code")
|
|
34
|
+
.describe("The AI coding agent the prompt is formatted for."),
|
|
35
|
+
style: z.enum(STYLES)
|
|
36
|
+
.default("plan-first")
|
|
37
|
+
.describe("Execution style baked into the prompt: 'plan-first' plans before " +
|
|
38
|
+
"coding, 'direct-edit' makes the smallest change, 'explore-first' " +
|
|
39
|
+
"maps the codebase first."),
|
|
40
|
+
};
|
|
41
|
+
const outputSchema = {
|
|
42
|
+
prompt: z.string()
|
|
43
|
+
.describe("The refined, tool-tuned prompt — hand this to your coding agent."),
|
|
44
|
+
tier: z.string().describe("Account tier that produced it: 'free' or 'pro'."),
|
|
45
|
+
quality: z.object({
|
|
46
|
+
score: z.number(),
|
|
47
|
+
max_score: z.number(),
|
|
48
|
+
passed: z.boolean(),
|
|
49
|
+
}).nullable().describe("Quality Engine score, or null if scoring was unavailable."),
|
|
50
|
+
usage: z.object({
|
|
51
|
+
used_today: z.number(),
|
|
52
|
+
limit: z.number().nullable(),
|
|
53
|
+
}).describe("Today's usage for this account; 'limit' is null for unlimited Pro."),
|
|
54
|
+
};
|
|
55
|
+
const server = new McpServer({ name: "agentforge-mcp", version: "0.1.0" });
|
|
56
|
+
server.registerTool("agentforge_refine_prompt", {
|
|
57
|
+
title: "Refine a prompt with AgentForge",
|
|
58
|
+
description: `Turn a rough, plain-language coding request into a structured, tool-tuned prompt for an AI coding agent.
|
|
59
|
+
|
|
60
|
+
AgentForge extracts the real requirements, fills in missing edge cases, formats the prompt for the target agent's conventions, and runs it through a Quality Engine before returning it. Reach for this when a request is vague or under-specified and you want a sharper prompt before handing it to a coding agent.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
- request (string, required): the coding task in plain language, 1-4000 chars.
|
|
64
|
+
- target_tool (string): one of claude-code, codex, cursor, aider, continue, windsurf, kimi, generic. Default: claude-code.
|
|
65
|
+
- style (string): plan-first, direct-edit, or explore-first. Default: plan-first.
|
|
66
|
+
|
|
67
|
+
Returns the refined prompt as text. structuredContent additionally carries:
|
|
68
|
+
{
|
|
69
|
+
"prompt": string,
|
|
70
|
+
"tier": "free" | "pro",
|
|
71
|
+
"quality": { "score": number, "max_score": number, "passed": boolean } | null,
|
|
72
|
+
"usage": { "used_today": number, "limit": number | null }
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
Errors are returned as text, e.g.:
|
|
76
|
+
- "API key not configured" — set AGENTFORGE_API_KEY.
|
|
77
|
+
- "invalid or revoked API key" (401) — check the key at agentforge.sciscale.org.
|
|
78
|
+
- "daily free limit reached" (429) — upgrade to Pro for unlimited calls.`,
|
|
79
|
+
inputSchema,
|
|
80
|
+
outputSchema,
|
|
81
|
+
annotations: {
|
|
82
|
+
readOnlyHint: false,
|
|
83
|
+
destructiveHint: false,
|
|
84
|
+
idempotentHint: false,
|
|
85
|
+
openWorldHint: true,
|
|
86
|
+
},
|
|
87
|
+
}, async ({ request, target_tool, style }) => {
|
|
88
|
+
if (!API_KEY) {
|
|
89
|
+
return toolError("API key not configured. Set the AGENTFORGE_API_KEY environment " +
|
|
90
|
+
"variable — create a key at https://agentforge.sciscale.org/account/keys");
|
|
91
|
+
}
|
|
92
|
+
const controller = new AbortController();
|
|
93
|
+
const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
94
|
+
let resp;
|
|
95
|
+
try {
|
|
96
|
+
resp = await fetch(API_URL, {
|
|
97
|
+
method: "POST",
|
|
98
|
+
headers: {
|
|
99
|
+
"Authorization": `Bearer ${API_KEY}`,
|
|
100
|
+
"Content-Type": "application/json",
|
|
101
|
+
},
|
|
102
|
+
body: JSON.stringify({ input: request, target_tool, style }),
|
|
103
|
+
signal: controller.signal,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
return toolError(err instanceof Error && err.name === "AbortError"
|
|
108
|
+
? `AgentForge did not respond within ${REQUEST_TIMEOUT_MS / 1000}s — try again.`
|
|
109
|
+
: `could not reach AgentForge: ${err instanceof Error ? err.message : String(err)}`);
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
}
|
|
114
|
+
if (!resp.ok) {
|
|
115
|
+
return toolError(await describeHttpError(resp));
|
|
116
|
+
}
|
|
117
|
+
const data = (await resp.json());
|
|
118
|
+
const structured = {
|
|
119
|
+
prompt: data.prompt,
|
|
120
|
+
tier: data.tier,
|
|
121
|
+
quality: data.quality,
|
|
122
|
+
usage: data.usage,
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
content: [{ type: "text", text: data.prompt }],
|
|
126
|
+
structuredContent: structured,
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
function toolError(message) {
|
|
130
|
+
return {
|
|
131
|
+
isError: true,
|
|
132
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
async function describeHttpError(resp) {
|
|
136
|
+
let detail = "";
|
|
137
|
+
try {
|
|
138
|
+
const body = (await resp.json());
|
|
139
|
+
if (body.detail)
|
|
140
|
+
detail = ` — ${body.detail}`;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
/* error body was not JSON; the status code alone will have to do */
|
|
144
|
+
}
|
|
145
|
+
switch (resp.status) {
|
|
146
|
+
case 401:
|
|
147
|
+
return "invalid or revoked API key. Check AGENTFORGE_API_KEY, or create " +
|
|
148
|
+
"a new key at https://agentforge.sciscale.org/account/keys";
|
|
149
|
+
case 429:
|
|
150
|
+
return `daily free limit reached${detail}. Upgrade to Pro for unlimited ` +
|
|
151
|
+
"calls at https://agentforge.sciscale.org/pricing";
|
|
152
|
+
case 400:
|
|
153
|
+
case 422:
|
|
154
|
+
return `the request was rejected${detail}.`;
|
|
155
|
+
default:
|
|
156
|
+
return `AgentForge API returned HTTP ${resp.status}${detail}.`;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async function main() {
|
|
160
|
+
if (!API_KEY) {
|
|
161
|
+
// Don't exit — start anyway so the client can connect and the tool call
|
|
162
|
+
// returns a clear, actionable message instead of a generic launch failure.
|
|
163
|
+
console.error("agentforge-mcp: warning — AGENTFORGE_API_KEY is not set; refine calls " +
|
|
164
|
+
"will fail until it is.");
|
|
165
|
+
}
|
|
166
|
+
const transport = new StdioServerTransport();
|
|
167
|
+
await server.connect(transport);
|
|
168
|
+
// stdout is the protocol channel — all logging must go to stderr.
|
|
169
|
+
console.error("agentforge-mcp running (stdio)");
|
|
170
|
+
}
|
|
171
|
+
main().catch((err) => {
|
|
172
|
+
console.error("agentforge-mcp fatal:", err);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agentforge-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for AgentForge — turn rough requests into tool-tuned, quality-checked prompts for AI coding agents.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "sciscale studio",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"bin": {
|
|
10
|
+
"agentforge-mcp": "dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=18"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"prepublishOnly": "npm run build"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"mcp",
|
|
27
|
+
"model-context-protocol",
|
|
28
|
+
"agentforge",
|
|
29
|
+
"prompt-engineering",
|
|
30
|
+
"claude-code",
|
|
31
|
+
"cursor",
|
|
32
|
+
"ai-coding-agent"
|
|
33
|
+
],
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/Liyue2341/agentforge-mcp.git"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://agentforge.sciscale.org",
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/Liyue2341/agentforge-mcp/issues"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
44
|
+
"zod": "^3.23.8"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^22.10.0",
|
|
48
|
+
"typescript": "^5.7.2"
|
|
49
|
+
}
|
|
50
|
+
}
|