@createsomething/ground-mcp 0.3.5 → 0.3.6

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.
Files changed (3) hide show
  1. package/README.md +31 -49
  2. package/install.js +5 -5
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@createsomething/ground-mcp.svg)](https://www.npmjs.com/package/@createsomething/ground-mcp)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- **Grounded claims for code.** An MCP server that prevents AI hallucination in code analysis.
6
+ **Grounded claims for code.** An MCP server that computes evidence before code-analysis claims.
7
7
 
8
- Works with Claude Code, Cursor, Windsurf, VS Code Copilot, Claude Desktop, and any MCP-compatible AI coding assistant.
8
+ The verified setup contract covers Claude Code, Codex, Cursor, and Windsurf.
9
9
 
10
10
  **[View Landing Page →](https://createsomething.agency/products/ground)**
11
11
 
@@ -13,12 +13,12 @@ Works with Claude Code, Cursor, Windsurf, VS Code Copilot, Claude Desktop, and a
13
13
 
14
14
  | Capability | Without Ground | With Ground |
15
15
  |------------|---------------|-------------|
16
- | Duplicate detection | "These look 95% similar" | Computed 87.3% similarity via AST + token analysis |
16
+ | Duplicate detection | "These look similar" | Computed AST + token similarity evidence |
17
17
  | Dead code claims | "This appears unused" | Verified: 0 imports, 0 type references |
18
18
  | Orphan detection | "Nothing imports this" | Checked: not a Worker entry point, not framework-implicit |
19
- | Design drift | "Colors look hardcoded" | Adoption ratio: 73% tokens, 27% violations |
19
+ | Design drift | "Colors look hardcoded" | Token usage and violation counts |
20
20
 
21
- **The difference**: Ground requires computation before claims. No hallucinated analysis.
21
+ **The difference**: Ground requires computation before its claim tools accept a claim.
22
22
 
23
23
  ## Recommended agent path
24
24
 
@@ -55,7 +55,7 @@ check in `check_coverage.<check>.status`. The contract is explicit:
55
55
  - `PASS`: the check completed for the relevant supported files and found no issue.
56
56
  - `FAIL`: the check found an issue or could not complete because of a read/parse failure.
57
57
  - `NOT_APPLICABLE`: no changed file needs that check.
58
- - `UNSUPPORTED`: relevant source exists, but the requested check cannot analyze its language (including Svelte duplicate-function scans).
58
+ - `UNSUPPORTED`: relevant source exists, but the requested check cannot analyze its language.
59
59
  - `TIMEOUT`: duplicate analysis reached its deadline before a complete result was available.
60
60
 
61
61
  `ground analyze` and `ground diff` accept `--timeout-ms` (120000 by default).
@@ -67,7 +67,16 @@ view; read `discovered_changed_files`, `analyzable_changed_files`, and
67
67
  `unsupported_changed_files` and `excluded_changed_files`, so a clean claim is
68
68
  valid only with `PASS`.
69
69
 
70
- Ground 0.3.5 extends source-bearing orphan evidence to nested Cloudflare Worker
70
+ Ground 0.3.6 supports TypeScript (`.ts`, `.tsx`), JavaScript (`.js`, `.jsx`,
71
+ `.mjs`), and Svelte (`.svelte`) in the declared analysis lane. Svelte component
72
+ scripts participate in duplicate analysis, while SvelteKit configuration,
73
+ routes, aliases, actions, stores, and framework entry points inform reachability
74
+ and dead-export evidence. Svelte dead-export checks analyze module-context
75
+ scripts only; instance-script exports such as legacy `export let` props are
76
+ component API and are excluded. Inputs outside that contract remain unsupported
77
+ rather than being reported as clean.
78
+
79
+ Ground 0.3.5 extended source-bearing orphan evidence to nested Cloudflare Worker
71
80
  configurations: `wrangler.toml` and `wrangler.json` `main` entries are protected
72
81
  with their exact config source. The legacy `ground find orphans` command now
73
82
  returns the same verified canonical report as `ground analyze --checks orphans`.
@@ -102,9 +111,10 @@ manifest have completed successfully.
102
111
  If a release was built successfully but npm publication was blocked (for
103
112
  example, during Trusted Publishing setup), rerun **Ground Release** manually
104
113
  with its exact `ground-v<version>` tag and **publish only** enabled. That path
105
- checks out the tag, requires it to match `package.json`, and verifies the
106
- existing release checksum manifest before publishing; it does not rebuild or
107
- replace GitHub Release assets.
114
+ checks out the tag, executes the governed calibration fixture suite, binds its
115
+ result to the exact source, recomputes the ledger thresholds, requires the tag
116
+ to match `package.json`, and verifies the existing release checksum manifest
117
+ before publishing; it does not rebuild or replace GitHub Release assets.
108
118
 
109
119
  ## The Problem
110
120
 
@@ -120,8 +130,8 @@ This is hallucination dressed up as analysis.
120
130
 
121
131
  Ground is an MCP server that:
122
132
  - Finds duplicates, dead code, and orphaned modules
123
- - Requires verification before claims
124
- - Blocks hallucinated analysis
133
+ - Requires verification before its claim tools record a finding
134
+ - Keeps checked inputs with the recorded claim
125
135
  - Provides confidence scores with evidence
126
136
 
127
137
  ---
@@ -137,8 +147,7 @@ This is the one everyone gets wrong. Claude Code doesn't read `.claude/mcp.json`
137
147
  **Option A: User scope (available everywhere)**
138
148
 
139
149
  ```bash
140
- npm install @createsomething/ground-mcp
141
- claude mcp add --scope user --transport stdio ground -- npx @createsomething/ground-mcp
150
+ claude mcp add --scope user --transport stdio ground -- npx --yes -p @createsomething/ground-mcp ground-mcp
142
151
  ```
143
152
 
144
153
  Restart Claude Code, run `/mcp`, and you should see "ground" connected.
@@ -152,7 +161,7 @@ Create `.mcp.json` in your project root:
152
161
  "mcpServers": {
153
162
  "ground": {
154
163
  "command": "npx",
155
- "args": ["@createsomething/ground-mcp"]
164
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp"]
156
165
  }
157
166
  }
158
167
  }
@@ -160,37 +169,16 @@ Create `.mcp.json` in your project root:
160
169
 
161
170
  Claude Code will prompt you to approve it on first use.
162
171
 
163
- ### Cursor (One-Click)
164
-
165
- [**Install in Cursor →**](cursor://anysphere.cursor-deeplink/mcp/install?name=ground&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyJAY3JlYXRlc29tZXRoaW5nL2dyb3VuZC1tY3AiXX0%3D)
166
-
167
- Or add to `.mcp.json` at your project root:
168
-
169
- ```json
170
- {
171
- "mcpServers": {
172
- "ground": {
173
- "command": "npx",
174
- "args": ["@createsomething/ground-mcp"]
175
- }
176
- }
177
- }
178
- ```
179
-
180
- ### Claude Desktop
181
-
182
- Add to `claude_desktop_config.json`:
172
+ ### Cursor
183
173
 
184
- - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
185
- - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
186
- - **Linux**: `~/.config/Claude/claude_desktop_config.json`
174
+ Add to `.mcp.json` at your project root:
187
175
 
188
176
  ```json
189
177
  {
190
178
  "mcpServers": {
191
179
  "ground": {
192
180
  "command": "npx",
193
- "args": ["@createsomething/ground-mcp"]
181
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp"]
194
182
  }
195
183
  }
196
184
  }
@@ -205,22 +193,16 @@ Settings → MCP → View raw config, add:
205
193
  "mcpServers": {
206
194
  "ground": {
207
195
  "command": "npx",
208
- "args": ["@createsomething/ground-mcp"]
196
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp"]
209
197
  }
210
198
  }
211
199
  }
212
200
  ```
213
201
 
214
- ### VS Code + Copilot
215
-
216
- 1. Open Extensions panel
217
- 2. Filter by "MCP Server"
218
- 3. Search "ground"
219
-
220
202
  ### Codex CLI
221
203
 
222
204
  ```bash
223
- codex mcp add ground --command "npx @createsomething/ground-mcp"
205
+ codex mcp add ground -- npx --yes -p @createsomething/ground-mcp ground-mcp
224
206
  ```
225
207
 
226
208
  ### Global Install (When npx Isn't Your Thing)
@@ -268,7 +250,7 @@ Ground needs to know where your code is. For project-specific analysis, run it f
268
250
  "mcpServers": {
269
251
  "ground": {
270
252
  "command": "npx",
271
- "args": ["@createsomething/ground-mcp", "--workspace", "/path/to/your/project"]
253
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp", "--workspace", "/path/to/your/project"]
272
254
  }
273
255
  }
274
256
  }
@@ -391,7 +373,7 @@ Ground is based on a simple principle: **no claim without evidence**.
391
373
  - **Dead code** → You have to count the uses first
392
374
  - **Orphans** → You have to check the connections first
393
375
 
394
- This prevents AI hallucination by requiring computation before synthesis.
376
+ This keeps Ground's recorded claims tied to prerequisite computation.
395
377
 
396
378
  ## Configuration
397
379
 
package/install.js CHANGED
@@ -17,11 +17,10 @@ const VERSION = require('./package.json').version;
17
17
  const SKIP_INSTALL = process.env.GROUND_MCP_SKIP_BINARY_INSTALL === '1';
18
18
  const IS_SOURCE_TREE_INSTALL = fs.existsSync(path.resolve(__dirname, '../Cargo.toml'));
19
19
 
20
- // Platform mapping
21
- // Note: macOS Intel uses arm64 binary via Rosetta 2
20
+ // Platform mapping. Every supported host receives a native archive.
22
21
  const PLATFORMS = {
23
22
  'darwin-arm64': 'darwin-arm64',
24
- 'darwin-x64': 'darwin-arm64', // Rosetta 2 compatibility
23
+ 'darwin-x64': 'darwin-x64',
25
24
  'linux-arm64': 'linux-arm64',
26
25
  'linux-x64': 'linux-x64',
27
26
  'win32-x64': 'win32-x64',
@@ -33,8 +32,8 @@ function getPlatformKey() {
33
32
  return `${platform}-${arch}`;
34
33
  }
35
34
 
36
- function getBinaryName() {
37
- const key = getPlatformKey();
35
+ function getBinaryName(platform = process.platform, arch = process.arch) {
36
+ const key = `${platform}-${arch}`;
38
37
  const name = PLATFORMS[key];
39
38
 
40
39
  if (!name) {
@@ -205,6 +204,7 @@ if (require.main === module) {
205
204
 
206
205
  module.exports = {
207
206
  download,
207
+ getBinaryName,
208
208
  getDownloadUrl,
209
209
  getChecksumsUrl,
210
210
  verifyArchiveIntegrity,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@createsomething/ground-mcp",
3
- "version": "0.3.5",
4
- "description": "Grounded claims for code. MCP server that prevents AI hallucination in code analysis.",
3
+ "version": "0.3.6",
4
+ "description": "Evidence-first code analysis for agents in TypeScript, JavaScript, and Svelte codebases.",
5
5
  "author": "CREATE SOMETHING <hello@createsomething.io>",
6
6
  "license": "MIT",
7
7
  "repository": {