@createsomething/ground-mcp 0.2.3 → 0.3.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/README.md +75 -1
- package/bin/ground +0 -0
- package/bin/ground-mcp +0 -0
- package/install.js +43 -6
- package/package.json +39 -3
package/README.md
CHANGED
|
@@ -3,10 +3,52 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@createsomething/ground-mcp)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
Grounded claims for code
|
|
6
|
+
**Grounded claims for code.** An MCP server that prevents AI hallucination in code analysis.
|
|
7
|
+
|
|
8
|
+
Works with Claude Code, Cursor, Windsurf, VS Code Copilot, Claude Desktop, and any MCP-compatible AI coding assistant.
|
|
7
9
|
|
|
8
10
|
**[View Landing Page →](https://createsomething.agency/products/ground)**
|
|
9
11
|
|
|
12
|
+
## Why Ground?
|
|
13
|
+
|
|
14
|
+
| Capability | Without Ground | With Ground |
|
|
15
|
+
|------------|---------------|-------------|
|
|
16
|
+
| Duplicate detection | "These look 95% similar" | Computed 87.3% similarity via AST + token analysis |
|
|
17
|
+
| Dead code claims | "This appears unused" | Verified: 0 imports, 0 type references |
|
|
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 |
|
|
20
|
+
|
|
21
|
+
**The difference**: Ground requires computation before claims. No hallucinated analysis.
|
|
22
|
+
|
|
23
|
+
## Recommended agent path
|
|
24
|
+
|
|
25
|
+
Use CTX and Ground for different evidence:
|
|
26
|
+
|
|
27
|
+
- **CTX** retrieves the history of earlier agent work.
|
|
28
|
+
- **Ground** computes facts about the code that is on disk now.
|
|
29
|
+
|
|
30
|
+
For a current-source review, start with the compact verified loop:
|
|
31
|
+
|
|
32
|
+
1. `ground_analyze` — get machine-readable findings for a directory.
|
|
33
|
+
2. `ground_diff` — restrict the same checks to changes since a Git baseline.
|
|
34
|
+
3. `ground_verify_fix` — confirm the specific reported issue is gone.
|
|
35
|
+
4. `ground_explain` — inspect why Ground included, excluded, or scored a result.
|
|
36
|
+
|
|
37
|
+
The MCP server also retains targeted and graph tools for deeper investigations.
|
|
38
|
+
The installed CLI exposes the same batch and Git-aware entry points:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
ground analyze ./src --checks duplicates,dead_exports
|
|
42
|
+
ground diff ./src --base origin/main --checks duplicates
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Both commands print JSON evidence. `ground diff` only returns files inside the
|
|
46
|
+
requested directory and resolves Git paths from the repository root, so it is
|
|
47
|
+
safe to run from a package inside a monorepo.
|
|
48
|
+
|
|
49
|
+
The release package includes the native Apple Silicon binaries directly; other
|
|
50
|
+
supported platforms download the matching verified release asset during install.
|
|
51
|
+
|
|
10
52
|
## The Problem
|
|
11
53
|
|
|
12
54
|
AI agents are confident. Too confident.
|
|
@@ -23,6 +65,7 @@ Ground is an MCP server that:
|
|
|
23
65
|
- Finds duplicates, dead code, and orphaned modules
|
|
24
66
|
- Requires verification before claims
|
|
25
67
|
- Blocks hallucinated analysis
|
|
68
|
+
- Provides confidence scores with evidence
|
|
26
69
|
|
|
27
70
|
---
|
|
28
71
|
|
|
@@ -303,6 +346,27 @@ Ground loads `.ground.yml` from your project root for:
|
|
|
303
346
|
|
|
304
347
|
See [Full Documentation](https://github.com/createsomethingtoday/create-something-monorepo/tree/main/packages/ground) for configuration reference.
|
|
305
348
|
|
|
349
|
+
## Native service pilot
|
|
350
|
+
|
|
351
|
+
The CRE-1473 pilot keeps TypeScript as the control plane and invokes the existing Rust `ground-mcp` binary through a small, typed MCP adapter. It is a bounded proof for analysis workloads, not a production routing change or a broad language migration.
|
|
352
|
+
|
|
353
|
+
The pilot owns four things:
|
|
354
|
+
|
|
355
|
+
- `pilot/ground-native-client.ts` — discovers and calls `ground_analyze` over stdio MCP with explicit timeout and error behavior
|
|
356
|
+
- `pilot/benchmark.ts` — captures repeated native samples plus a directional comparison with the existing TypeScript duplicate-analysis script
|
|
357
|
+
- `pilot/ground-benchmark-receipt.schema.json` — makes the retained evidence machine-checkable
|
|
358
|
+
- `pilot/validate-receipt.ts` — independently rejects incomplete, failed, or inconsistent receipts
|
|
359
|
+
|
|
360
|
+
From the repository root, run:
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
pnpm --filter @createsomething/ground-mcp run pilot:verify
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
The benchmark defaults to `packages/mcp-core/src`, five retained samples, one warmup, and the release binary at `packages/ground/target/release/ground-mcp`. Metrics between the Rust MCP path and TypeScript script are directional only because the implementations do not use identical parsers or algorithms.
|
|
367
|
+
|
|
368
|
+
Rollback is removal of the pilot adapter, benchmark, and package-local development scripts. No existing Ground command, npm installer path, Cloudflare surface, or production consumer is redirected by this pilot.
|
|
369
|
+
|
|
306
370
|
## Links
|
|
307
371
|
|
|
308
372
|
- [Full Documentation](https://github.com/createsomethingtoday/create-something-monorepo/tree/main/packages/ground)
|
|
@@ -312,3 +376,13 @@ See [Full Documentation](https://github.com/createsomethingtoday/create-somethin
|
|
|
312
376
|
## License
|
|
313
377
|
|
|
314
378
|
MIT
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## Related
|
|
383
|
+
|
|
384
|
+
Looking for task coordination? Use Linear with the CREATE SOMETHING `pnpm linear:*` wrappers for tracked work, ownership, status, and delivery evidence.
|
|
385
|
+
|
|
386
|
+
## Keywords
|
|
387
|
+
|
|
388
|
+
MCP server, Model Context Protocol, AI code analysis, static analysis, duplicate detection, dead code detection, orphan detection, code quality, hallucination prevention, LLM tools, Claude Code, Cursor IDE, Windsurf, VS Code Copilot, Anthropic Claude, AI coding assistant, Rust, TypeScript, JavaScript, monorepo analysis, design tokens, CSS analysis, code verification.
|
package/bin/ground
ADDED
|
Binary file
|
package/bin/ground-mcp
CHANGED
|
Binary file
|
package/install.js
CHANGED
|
@@ -14,6 +14,8 @@ const zlib = require('zlib');
|
|
|
14
14
|
|
|
15
15
|
const REPO = 'createsomethingtoday/create-something-monorepo';
|
|
16
16
|
const VERSION = require('./package.json').version;
|
|
17
|
+
const SKIP_INSTALL = process.env.GROUND_MCP_SKIP_BINARY_INSTALL === '1';
|
|
18
|
+
const IS_SOURCE_TREE_INSTALL = fs.existsSync(path.resolve(__dirname, '../Cargo.toml'));
|
|
17
19
|
|
|
18
20
|
// Platform mapping
|
|
19
21
|
// Note: macOS Intel uses arm64 binary via Rosetta 2
|
|
@@ -44,10 +46,25 @@ function getBinaryName() {
|
|
|
44
46
|
return name;
|
|
45
47
|
}
|
|
46
48
|
|
|
47
|
-
function getDownloadUrl(binaryName) {
|
|
48
|
-
const ext =
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
function getDownloadUrl(binaryName, platform = process.platform) {
|
|
50
|
+
const ext = platform === 'win32' ? 'zip' : 'tar.gz';
|
|
51
|
+
return `https://github.com/${REPO}/releases/download/ground-v${VERSION}/ground-${binaryName}.${ext}`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function hasBundledNativeBinaries() {
|
|
55
|
+
// The npm artifact includes a release-built Apple Silicon bootstrap pair.
|
|
56
|
+
// Other platforms continue through the release-asset downloader below.
|
|
57
|
+
if (getPlatformKey() !== 'darwin-arm64') return false;
|
|
58
|
+
|
|
59
|
+
const binDir = path.join(__dirname, 'bin');
|
|
60
|
+
return ['ground', 'ground-mcp'].every((name) => {
|
|
61
|
+
const binary = path.join(binDir, name);
|
|
62
|
+
try {
|
|
63
|
+
return fs.statSync(binary).isFile() && (fs.statSync(binary).mode & 0o111) !== 0;
|
|
64
|
+
} catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
51
68
|
}
|
|
52
69
|
|
|
53
70
|
async function download(url) {
|
|
@@ -92,6 +109,21 @@ async function extractZip(buffer, destDir) {
|
|
|
92
109
|
}
|
|
93
110
|
|
|
94
111
|
async function install() {
|
|
112
|
+
if (SKIP_INSTALL) {
|
|
113
|
+
console.log('Ground MCP: Skipping binary install because GROUND_MCP_SKIP_BINARY_INSTALL=1');
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (IS_SOURCE_TREE_INSTALL) {
|
|
118
|
+
console.log('Ground MCP: Skipping binary install in source checkout');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (hasBundledNativeBinaries()) {
|
|
123
|
+
console.log('Ground MCP: Using bundled darwin-arm64 binaries');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
95
127
|
console.log('Ground MCP: Installing binary...');
|
|
96
128
|
|
|
97
129
|
const binaryName = getBinaryName();
|
|
@@ -166,5 +198,10 @@ async function install() {
|
|
|
166
198
|
}
|
|
167
199
|
}
|
|
168
200
|
|
|
169
|
-
|
|
170
|
-
install();
|
|
201
|
+
if (require.main === module) {
|
|
202
|
+
install();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
module.exports = {
|
|
206
|
+
getDownloadUrl,
|
|
207
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@createsomething/ground-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Grounded claims for code. MCP server that prevents AI hallucination in code analysis.",
|
|
5
5
|
"author": "CREATE SOMETHING <hello@createsomething.io>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,21 +15,57 @@
|
|
|
15
15
|
},
|
|
16
16
|
"keywords": [
|
|
17
17
|
"mcp",
|
|
18
|
+
"mcp-server",
|
|
18
19
|
"model-context-protocol",
|
|
19
20
|
"ai",
|
|
21
|
+
"ai-coding",
|
|
22
|
+
"ai-agent",
|
|
20
23
|
"code-analysis",
|
|
24
|
+
"static-analysis",
|
|
21
25
|
"duplicate-detection",
|
|
22
26
|
"dead-code",
|
|
27
|
+
"dead-code-detection",
|
|
28
|
+
"orphan-detection",
|
|
29
|
+
"code-quality",
|
|
30
|
+
"hallucination-prevention",
|
|
23
31
|
"grounding",
|
|
32
|
+
"verification",
|
|
24
33
|
"llm",
|
|
34
|
+
"llm-tools",
|
|
25
35
|
"claude",
|
|
26
|
-
"
|
|
36
|
+
"claude-code",
|
|
37
|
+
"cursor",
|
|
38
|
+
"windsurf",
|
|
39
|
+
"copilot",
|
|
40
|
+
"codex",
|
|
41
|
+
"anthropic",
|
|
42
|
+
"openai",
|
|
43
|
+
"rust",
|
|
44
|
+
"typescript",
|
|
45
|
+
"javascript",
|
|
46
|
+
"monorepo",
|
|
47
|
+
"design-tokens",
|
|
48
|
+
"css-analysis"
|
|
27
49
|
],
|
|
28
50
|
"bin": {
|
|
51
|
+
"ground": "bin/ground",
|
|
29
52
|
"ground-mcp": "bin/ground-mcp"
|
|
30
53
|
},
|
|
31
54
|
"scripts": {
|
|
32
|
-
"postinstall": "node install.js"
|
|
55
|
+
"postinstall": "node install.js",
|
|
56
|
+
"pilot:build": "cargo build --release --manifest-path ../Cargo.toml --bin ground --bin ground-mcp",
|
|
57
|
+
"pilot:benchmark": "tsx pilot/benchmark.ts",
|
|
58
|
+
"pilot:check": "tsc --noEmit -p pilot/tsconfig.json",
|
|
59
|
+
"pilot:receipt:validate": "tsx pilot/validate-receipt.ts",
|
|
60
|
+
"pilot:test": "pnpm run pilot:build && tsx --test pilot/*.test.ts",
|
|
61
|
+
"pilot:verify": "pnpm run pilot:check && pnpm run pilot:test && pnpm run pilot:benchmark && pnpm run pilot:receipt:validate -- pilot/evidence/ground-native-benchmark-receipt.v1.json"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
65
|
+
"@types/node": "^24.10.9",
|
|
66
|
+
"ajv": "^8.17.1",
|
|
67
|
+
"tsx": "^4.21.0",
|
|
68
|
+
"typescript": "^5.9.3"
|
|
33
69
|
},
|
|
34
70
|
"files": [
|
|
35
71
|
"bin",
|