wolfpack-mcp 1.0.112 → 1.0.113
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/README.md +28 -5
- package/dist/brand.js +7 -0
- package/dist/serverInstructions.js +7 -2
- package/dist/serverInstructions.test.js +27 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Clachan MCP Server (formerly Wolfpack)
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/wolfpack-mcp)
|
|
4
4
|
|
|
5
|
-
Connect your AI assistant to
|
|
5
|
+
Connect your AI assistant to Clachan to manage work items, track issues, update documentation, and log progress—all
|
|
6
6
|
through natural conversation.
|
|
7
7
|
|
|
8
|
+
> **Wolfpack is now Clachan.** Same product, same server, same account. The package is still published as
|
|
9
|
+
> `wolfpack-mcp`, its settings are still `WOLFPACK_*`, and API keys still begin `wfp_`; nothing you have
|
|
10
|
+
> configured needs to change. See [Clachan and Wolfpack](#clachan-and-wolfpack) below.
|
|
11
|
+
|
|
8
12
|
## Quick Start
|
|
9
13
|
|
|
10
14
|
There are two ways to connect:
|
|
@@ -24,19 +28,20 @@ Add to your Claude Desktop config file:
|
|
|
24
28
|
"mcpServers": {
|
|
25
29
|
"wolfpack": {
|
|
26
30
|
"type": "url",
|
|
27
|
-
"url": "https://
|
|
31
|
+
"url": "https://app.clachan.ai/mcp"
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
}
|
|
31
35
|
```
|
|
32
36
|
|
|
33
|
-
Restart Claude Desktop. You'll be prompted to sign in with your
|
|
37
|
+
Restart Claude Desktop. You'll be prompted to sign in with your Clachan account via OAuth. The server is also
|
|
38
|
+
still served at `https://wolfpacks.work/mcp`, so an existing configuration keeps working.
|
|
34
39
|
|
|
35
40
|
### Coding Agents (stdio)
|
|
36
41
|
|
|
37
42
|
#### 1. Generate an API Key
|
|
38
43
|
|
|
39
|
-
1. Log in to [wolfpacks.work](https://wolfpacks.work)
|
|
44
|
+
1. Log in to [app.clachan.ai](https://app.clachan.ai) (or [wolfpacks.work](https://wolfpacks.work), which still works)
|
|
40
45
|
2. Go to **Account Settings** → **API Keys**
|
|
41
46
|
3. Click **Create New Key**
|
|
42
47
|
4. Select the permissions you need (work items, issues, wiki, etc.)
|
|
@@ -62,6 +67,24 @@ Restart Claude Desktop. You'll be prompted to sign in with your Wolfpack account
|
|
|
62
67
|
|
|
63
68
|
**Cursor / Windsurf** — use the same `command`, `args`, and `env` in your editor's MCP configuration.
|
|
64
69
|
|
|
70
|
+
The stdio server talks to `https://wolfpacks.work/api/mcp` unless `WOLFPACK_API_URL` says otherwise; both
|
|
71
|
+
domains serve the same deployment, so there is nothing to change during the rename.
|
|
72
|
+
|
|
73
|
+
## Clachan and Wolfpack
|
|
74
|
+
|
|
75
|
+
The product was renamed from Wolfpack to Clachan in September 2026. Both names are understood while the
|
|
76
|
+
rename settles: the server introduces the product to your assistant as "Clachan (formerly Wolfpack)", so
|
|
77
|
+
asking for "the Wolfpack issue" or "my Clachan work items" means the same thing.
|
|
78
|
+
|
|
79
|
+
What you configure is deliberately **unchanged**, because it is the contract every installed client already
|
|
80
|
+
depends on:
|
|
81
|
+
|
|
82
|
+
- the package name, `wolfpack-mcp`, and the server name `wolfpack` in your MCP configuration
|
|
83
|
+
- the environment variables: `WOLFPACK_API_KEY`, `WOLFPACK_API_URL`, `WOLFPACK_ORG_SLUG`, `WOLFPACK_TEAM_SLUG`
|
|
84
|
+
- the API key prefixes `wfp_sk_` (user) and `wfp_ak_` (agent)
|
|
85
|
+
|
|
86
|
+
If those are ever renamed it will be announced here, with the old spellings kept working alongside the new.
|
|
87
|
+
|
|
65
88
|
## Installation
|
|
66
89
|
|
|
67
90
|
```bash
|
package/dist/brand.js
CHANGED
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
*
|
|
9
9
|
* `WOLFPACK_*` variables are this package's public configuration contract with the MCP
|
|
10
10
|
* clients that already set them, so they are deliberately not renamed here.
|
|
11
|
+
*
|
|
12
|
+
* `productFormerName` is what the product was called before a rename, for as long as the
|
|
13
|
+
* transition lasts (#2592); the server instructions say it once so a user who still uses
|
|
14
|
+
* the old name is understood. Unlike the other two, a blank `PRODUCT_FORMER_NAME` is a
|
|
15
|
+
* value — "no former name" — so a deployment rebranded by its environment can turn the
|
|
16
|
+
* suffix off. Empty in `brand.json` once the transition is over.
|
|
11
17
|
*/
|
|
12
18
|
export const productName = process.env.PRODUCT_NAME || 'Clachan';
|
|
19
|
+
export const productFormerName = process.env.PRODUCT_FORMER_NAME ?? 'Wolfpack';
|
|
13
20
|
export const productDomain = process.env.PRODUCT_DOMAIN || 'wolfpacks.work';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { productName } from './brand.js';
|
|
1
|
+
import { productFormerName, productName } from './brand.js';
|
|
2
2
|
/**
|
|
3
3
|
* Server instructions, returned in the MCP `initialize` result.
|
|
4
4
|
*
|
|
@@ -12,8 +12,13 @@ import { productName } from './brand.js';
|
|
|
12
12
|
* Mirrored in `packages/backend/src/mcp/serverInstructions.ts` for the remote
|
|
13
13
|
* server — the two servers have no shared package, and already keep their tool
|
|
14
14
|
* descriptions in step by hand.
|
|
15
|
+
*
|
|
16
|
+
* While a rename is in transition the product is introduced as "X (formerly Y)", once
|
|
17
|
+
* (#2592): nothing else tells the model that "the Wolfpack issue" and a Clachan issue are
|
|
18
|
+
* the same thing. The suffix disappears with the former name.
|
|
15
19
|
*/
|
|
16
|
-
|
|
20
|
+
const formerly = productFormerName ? ` (formerly ${productFormerName})` : '';
|
|
21
|
+
export const SERVER_INSTRUCTIONS = `${productName}${formerly} is this project's tracker. Its references override the usual GitHub reading of "#N".
|
|
17
22
|
|
|
18
23
|
- A bare "#123" — "work on #123", "look at #42" — is ALWAYS a ${productName} work item. Call get_work_item. Do not run \`gh issue view\`, and do not search GitHub for it.
|
|
19
24
|
- Read a number as a GitHub issue or pull request only when the user says GitHub, PR, or gh — "the GitHub issue #123", "PR #123".
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import { SERVER_INSTRUCTIONS } from './serverInstructions.js';
|
|
3
|
+
import { productFormerName, productName } from './brand.js';
|
|
3
4
|
describe('SERVER_INSTRUCTIONS', () => {
|
|
4
5
|
it('claims a bare #N for work items before any tool is chosen (#1373)', () => {
|
|
5
6
|
// The whole point of the instructions field: a client puts it in the system
|
|
@@ -28,4 +29,29 @@ describe('SERVER_INSTRUCTIONS', () => {
|
|
|
28
29
|
it('stays short enough to sit in a system prompt', () => {
|
|
29
30
|
expect(SERVER_INSTRUCTIONS.length).toBeLessThan(1200);
|
|
30
31
|
});
|
|
32
|
+
it('introduces the product by its former name too, while it has one (#2592)', () => {
|
|
33
|
+
// A user mid-rename still says the old name; nothing else tells the model the
|
|
34
|
+
// two are one product. Read from the brand so the test survives the transition
|
|
35
|
+
// ending — at which point the suffix must be gone, and this asserts that too.
|
|
36
|
+
const expected = productFormerName
|
|
37
|
+
? `${productName} (formerly ${productFormerName}) is this project's tracker`
|
|
38
|
+
: `${productName} is this project's tracker`;
|
|
39
|
+
expect(SERVER_INSTRUCTIONS).toContain(expected);
|
|
40
|
+
expect(SERVER_INSTRUCTIONS.match(/formerly/g) ?? []).toHaveLength(productFormerName ? 1 : 0);
|
|
41
|
+
});
|
|
42
|
+
it('says nothing about a former name when the deployment sets a blank one', async () => {
|
|
43
|
+
// A blank value is a value here: a deployment rebranded through PRODUCT_NAME must be
|
|
44
|
+
// able to turn the suffix off, otherwise it introduces itself as formerly Wolfpack.
|
|
45
|
+
vi.stubEnv('PRODUCT_FORMER_NAME', '');
|
|
46
|
+
vi.resetModules();
|
|
47
|
+
try {
|
|
48
|
+
const fresh = await import('./serverInstructions.js');
|
|
49
|
+
expect(fresh.SERVER_INSTRUCTIONS).not.toContain('formerly');
|
|
50
|
+
expect(fresh.SERVER_INSTRUCTIONS).toContain(`${productName} is this project's tracker`);
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
vi.unstubAllEnvs();
|
|
54
|
+
vi.resetModules();
|
|
55
|
+
}
|
|
56
|
+
});
|
|
31
57
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wolfpack-mcp",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "MCP server for Wolfpack AI-enhanced software delivery tools",
|
|
3
|
+
"version": "1.0.113",
|
|
4
|
+
"description": "MCP server for Clachan (formerly Wolfpack), AI-enhanced software delivery tools",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"keywords": [
|
|
24
24
|
"mcp",
|
|
25
25
|
"model-context-protocol",
|
|
26
|
+
"clachan",
|
|
26
27
|
"wolfpack",
|
|
27
28
|
"ai",
|
|
28
29
|
"claude",
|