@granoflow/mcp-server 0.1.2 → 0.1.3
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 +6 -0
- package/dist/metadata.d.ts +1 -1
- package/dist/metadata.js +1 -1
- package/docs/release-checklist.md +144 -0
- package/docs/user-install-demo.md +140 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -42,6 +42,12 @@ file; keep `GRANOFLOW_API_TOKEN` in the MCP client environment.
|
|
|
42
42
|
npm install -g @granoflow/mcp-server
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
For a user-facing setup walkthrough, see
|
|
46
|
+
[Granoflow MCP User Install And Demo Guide](docs/user-install-demo.md).
|
|
47
|
+
|
|
48
|
+
For maintainers, see
|
|
49
|
+
[Granoflow MCP Release Checklist](docs/release-checklist.md).
|
|
50
|
+
|
|
45
51
|
For local development:
|
|
46
52
|
|
|
47
53
|
```bash
|
package/dist/metadata.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const SERVER_NAME = "granoflow-mcp-server";
|
|
2
|
-
export declare const SERVER_VERSION = "0.1.
|
|
2
|
+
export declare const SERVER_VERSION = "0.1.3";
|
package/dist/metadata.js
CHANGED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Granoflow MCP Release Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist before publishing a new `@granoflow/mcp-server` version.
|
|
4
|
+
|
|
5
|
+
## 1. Source State
|
|
6
|
+
|
|
7
|
+
- Confirm the worktree is clean or only contains intended release changes:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
git status --short --branch
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
- Confirm the package version, runtime metadata, and tests agree:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
node -p "require('./package.json').version"
|
|
17
|
+
npm run check
|
|
18
|
+
node dist/index.js --version
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 2. Static Gates
|
|
22
|
+
|
|
23
|
+
Run the project gate:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm run check
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The gate must pass:
|
|
30
|
+
|
|
31
|
+
- Prettier
|
|
32
|
+
- ESLint
|
|
33
|
+
- TypeScript build
|
|
34
|
+
- Vitest
|
|
35
|
+
|
|
36
|
+
## 3. Package Contents
|
|
37
|
+
|
|
38
|
+
Inspect the packed files:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm pack --json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Verify:
|
|
45
|
+
|
|
46
|
+
- `dist/index.js` is present.
|
|
47
|
+
- `dist/index.js` mode is executable, for example `493`.
|
|
48
|
+
- `README.md` is present.
|
|
49
|
+
- `docs/` files are present when documentation changed.
|
|
50
|
+
- no obsolete `dist/cli.*` files are present.
|
|
51
|
+
- no local config, token, recovery code, or temporary file is present.
|
|
52
|
+
|
|
53
|
+
Remove the generated `.tgz` after inspection unless you intentionally need it:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
rm -f granoflow-mcp-server-*.tgz
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 4. Local MCP Smoke
|
|
60
|
+
|
|
61
|
+
Start the package through stdio and list tools. The smoke should prove:
|
|
62
|
+
|
|
63
|
+
- expected tool count is returned.
|
|
64
|
+
- `granoflow_health` returns `code: "ok"` when Granoflow is running.
|
|
65
|
+
- resource tools such as project, milestone, and structured task tools exist.
|
|
66
|
+
- write tools can return `code: "dry_run"` without creating real data.
|
|
67
|
+
|
|
68
|
+
## 5. App Runtime Evidence
|
|
69
|
+
|
|
70
|
+
Verify the running Granoflow app:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
curl -s http://127.0.0.1:56789/v1/health
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
For macOS production app verification, `granoflow_setup_status` should show a
|
|
77
|
+
process path like:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
/Applications/granoflow.app/Contents/MacOS/granoflow
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 6. Client Config Examples
|
|
84
|
+
|
|
85
|
+
Confirm README and docs show the same command shape:
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
command = "npx"
|
|
89
|
+
args = ["-y", "@granoflow/mcp-server"]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Cursor and Codex examples should set:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
GRANOFLOW_API_BASE_URL=http://127.0.0.1:56789
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Do not add API tokens to checked-in examples.
|
|
99
|
+
|
|
100
|
+
## 7. Secret And Drift Checks
|
|
101
|
+
|
|
102
|
+
Search for obsolete command-wrapper references and secret-like values:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
rg -n "granoflow-cli|GRANOFLOW_CLI|cliPath|granoflow_cli" README.md docs src tests package.json AGENTS.md
|
|
106
|
+
rg -n "recovery code|_authToken|secret-token|npm password" README.md docs src tests package.json AGENTS.md
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Expected result:
|
|
110
|
+
|
|
111
|
+
- no obsolete command-wrapper dependency.
|
|
112
|
+
- no real token, OTP, password, or recovery code.
|
|
113
|
+
- test fixtures may use fake values only when they assert redaction.
|
|
114
|
+
|
|
115
|
+
## 8. Publish
|
|
116
|
+
|
|
117
|
+
Publish only after all previous checks pass:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm publish --access public
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
If npm requires two-factor authentication, provide an OTP through the command
|
|
124
|
+
line without printing it in logs. Do not paste OTPs or recovery codes into issue
|
|
125
|
+
reports, docs, screenshots, or chat transcripts.
|
|
126
|
+
|
|
127
|
+
## 9. Post-Publish Verification
|
|
128
|
+
|
|
129
|
+
Verify the published package:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm access get status @granoflow/mcp-server
|
|
133
|
+
npm dist-tag ls @granoflow/mcp-server
|
|
134
|
+
npx -y @granoflow/mcp-server@<version> --version
|
|
135
|
+
npx -y @granoflow/mcp-server --version
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Run one MCP stdio smoke against the published version:
|
|
139
|
+
|
|
140
|
+
- list tools
|
|
141
|
+
- call `granoflow_health`
|
|
142
|
+
- call one dry-run write tool
|
|
143
|
+
|
|
144
|
+
Only then write release notes or mark the release task done.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Granoflow MCP User Install And Demo Guide
|
|
2
|
+
|
|
3
|
+
This guide helps you connect Codex or Cursor to the Granoflow desktop app
|
|
4
|
+
through the Granoflow Local HTTP API.
|
|
5
|
+
|
|
6
|
+
## 1. Start Granoflow
|
|
7
|
+
|
|
8
|
+
Open the installed Granoflow desktop app. On macOS the production app is usually:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
/Applications/granoflow.app
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
In Granoflow, open the local interface service page and turn on the Local HTTP
|
|
15
|
+
API. The default local address is:
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
http://127.0.0.1:56789
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Verify the app is reachable:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -s http://127.0.0.1:56789/v1/health
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
A healthy response includes `status`, `apiEnabled`, `running`, and `version`.
|
|
28
|
+
|
|
29
|
+
## 2. Check The MCP Package
|
|
30
|
+
|
|
31
|
+
Verify the npm package can run:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx -y @granoflow/mcp-server --version
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The command should print the package version.
|
|
38
|
+
|
|
39
|
+
## 3. Configure Codex
|
|
40
|
+
|
|
41
|
+
Add this to `~/.codex/config.toml`:
|
|
42
|
+
|
|
43
|
+
```toml
|
|
44
|
+
[mcp_servers.granoflow]
|
|
45
|
+
type = "stdio"
|
|
46
|
+
command = "npx"
|
|
47
|
+
args = ["-y", "@granoflow/mcp-server"]
|
|
48
|
+
|
|
49
|
+
[mcp_servers.granoflow.env]
|
|
50
|
+
GRANOFLOW_API_BASE_URL = "http://127.0.0.1:56789"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Restart Codex or reload MCP servers after changing the file.
|
|
54
|
+
|
|
55
|
+
## 4. Configure Cursor
|
|
56
|
+
|
|
57
|
+
Add this to `~/.cursor/mcp.json`:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"mcpServers": {
|
|
62
|
+
"granoflow": {
|
|
63
|
+
"command": "npx",
|
|
64
|
+
"args": ["-y", "@granoflow/mcp-server"],
|
|
65
|
+
"env": {
|
|
66
|
+
"GRANOFLOW_API_BASE_URL": "http://127.0.0.1:56789"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Restart Cursor or reload MCP servers after changing the file.
|
|
74
|
+
|
|
75
|
+
## 5. First Demo
|
|
76
|
+
|
|
77
|
+
Ask your MCP client to call:
|
|
78
|
+
|
|
79
|
+
- `granoflow_health`
|
|
80
|
+
- `granoflow_version`
|
|
81
|
+
- `granoflow_task_list`
|
|
82
|
+
|
|
83
|
+
Expected result:
|
|
84
|
+
|
|
85
|
+
- health returns `code: "ok"`
|
|
86
|
+
- version returns Granoflow app version metadata
|
|
87
|
+
- task list returns your current Granoflow tasks
|
|
88
|
+
|
|
89
|
+
## 6. Dry-Run Write Demo
|
|
90
|
+
|
|
91
|
+
Use a dry-run before any write. For example, ask the MCP client to call
|
|
92
|
+
`granoflow_task_create_structured` with:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"title": "MCP dry-run test",
|
|
97
|
+
"description": "This request should preview only.",
|
|
98
|
+
"dryRun": true
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Expected result:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"code": "dry_run"
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
The dry-run preview should not create a real task.
|
|
111
|
+
|
|
112
|
+
## Troubleshooting
|
|
113
|
+
|
|
114
|
+
### The health check cannot connect
|
|
115
|
+
|
|
116
|
+
Check that Granoflow is open and that the Local HTTP API is enabled in the app.
|
|
117
|
+
If you changed the port in Granoflow, update `GRANOFLOW_API_BASE_URL` in your MCP
|
|
118
|
+
client config.
|
|
119
|
+
|
|
120
|
+
### The MCP client does not show Granoflow tools
|
|
121
|
+
|
|
122
|
+
Restart Codex or Cursor after editing the MCP config. Also verify:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npx -y @granoflow/mcp-server --version
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### The MCP client connects to the wrong app
|
|
129
|
+
|
|
130
|
+
Call `granoflow_setup_status`. On macOS, the process evidence should point to
|
|
131
|
+
the production app when that is what you intended:
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
/Applications/granoflow.app/Contents/MacOS/granoflow
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### You enabled an API token
|
|
138
|
+
|
|
139
|
+
Keep the token in the MCP client environment. Do not paste real tokens into
|
|
140
|
+
docs, screenshots, issue reports, or chat transcripts.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@granoflow/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "MCP server for Granoflow: exposes the Local HTTP API as tools for AI agents, IDEs, and automation.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"files": [
|
|
22
22
|
"dist",
|
|
23
|
+
"docs",
|
|
23
24
|
"README.md",
|
|
24
25
|
"LICENSE"
|
|
25
26
|
],
|