grai-mcp 0.1.0__tar.gz
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.
- grai_mcp-0.1.0/.gitignore +16 -0
- grai_mcp-0.1.0/LICENSE +27 -0
- grai_mcp-0.1.0/PKG-INFO +87 -0
- grai_mcp-0.1.0/README.md +70 -0
- grai_mcp-0.1.0/pyproject.toml +30 -0
- grai_mcp-0.1.0/src/grai_mcp/__init__.py +5 -0
- grai_mcp-0.1.0/src/grai_mcp/gate.py +1154 -0
- grai_mcp-0.1.0/src/grai_mcp/server.py +277 -0
- grai_mcp-0.1.0/tests/test_server.py +91 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Build output. Regenerated by: cd source && python3 scripts/build.py
|
|
2
|
+
source/dist/
|
|
3
|
+
dist/
|
|
4
|
+
|
|
5
|
+
# The root shipped page is a build output. The deploy copy in sale/grai.html
|
|
6
|
+
# must stay tracked because Cloudflare Pages serves it to the worker.
|
|
7
|
+
/grai.html
|
|
8
|
+
|
|
9
|
+
# Local junk
|
|
10
|
+
.DS_Store
|
|
11
|
+
*.bak
|
|
12
|
+
__pycache__/
|
|
13
|
+
*.pyc
|
|
14
|
+
node_modules/
|
|
15
|
+
.wrangler/
|
|
16
|
+
.preview/
|
grai_mcp-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 grai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of the instruction set, the skill, the research notes and the documentation in
|
|
7
|
+
this repository (the "Software"), to deal in the Software without restriction,
|
|
8
|
+
including without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense and/or sell copies of the Software, and to permit persons
|
|
10
|
+
to whom the Software is 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.
|
|
22
|
+
|
|
23
|
+
Scope note. The Software defined above is the instruction layer only. The
|
|
24
|
+
grai application, that is the page, the sparring engine, the deterministic
|
|
25
|
+
preflight engine and the Client Cadence Certificate, is not part of this
|
|
26
|
+
licence and is not covered by it. The application is licensed separately under
|
|
27
|
+
COMMERCIAL-LICENCE.md.
|
grai_mcp-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: grai-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Deterministic cadence gate and cryptographic seal verification as an MCP server
|
|
5
|
+
Project-URL: Homepage, https://grai.page
|
|
6
|
+
Project-URL: Repository, https://github.com/adrianpeticila/grai
|
|
7
|
+
Project-URL: Issues, https://github.com/adrianpeticila/grai/issues
|
|
8
|
+
Author-email: grai <hello@grai.page>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: ai-slop,cadence,linter,mcp,model-context-protocol,writing
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Requires-Python: >=3.9
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# grai-gate MCP server
|
|
19
|
+
|
|
20
|
+
<!-- mcp-name: io.github.adrianpeticila/grai-mcp -->
|
|
21
|
+
|
|
22
|
+
Deterministic cadence scoring and cryptographic seal verification for AI-generated
|
|
23
|
+
drafts, exposed as a Model Context Protocol server over stdio.
|
|
24
|
+
|
|
25
|
+
No API key needed for scoring. The gate is a pure Python scorer with no
|
|
26
|
+
dependencies outside the standard library.
|
|
27
|
+
|
|
28
|
+
## Install
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
uvx --from grai-mcp grai-gate-mcp
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Or with pip:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pip install grai-mcp
|
|
38
|
+
grai-gate-mcp
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Configure your client
|
|
42
|
+
|
|
43
|
+
Claude Desktop, Cursor, Cline, Windsurf and anything else that reads `mcpServers`:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"mcpServers": {
|
|
48
|
+
"grai-gate": {
|
|
49
|
+
"command": "uvx",
|
|
50
|
+
"args": ["--from", "grai-mcp", "grai-gate-mcp"]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Tools
|
|
57
|
+
|
|
58
|
+
| Tool | What it does | Needs network |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
| `grai_score_draft` | Scores a draft, returns score, sentence-length CV, failed rules | no |
|
|
61
|
+
| `grai_issue_agency_seal` | Audits a client draft and returns a public verification link | yes |
|
|
62
|
+
| `grai_verify_seal` | Verifies a signed seal record against the public keyring | yes |
|
|
63
|
+
|
|
64
|
+
`grai_score_draft` runs entirely offline. If the local scorer cannot load, it
|
|
65
|
+
falls back to the hosted endpoint.
|
|
66
|
+
|
|
67
|
+
## Example
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{"name": "grai_score_draft", "arguments": {"text": "Your draft goes here."}}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The response carries the score, the CV, the rules that failed, and upgrade
|
|
74
|
+
links. A score of 85 or higher passes.
|
|
75
|
+
|
|
76
|
+
## What the gate checks
|
|
77
|
+
|
|
78
|
+
Sentence-length variance (CV), contrastive negation, epiphany openers,
|
|
79
|
+
corporate slop words, em dashes, structural monotony, and five other
|
|
80
|
+
deterministic rules. Same engine as the `grai-gate` CLI, so scores match
|
|
81
|
+
between the CLI and the MCP server.
|
|
82
|
+
|
|
83
|
+
## Links
|
|
84
|
+
|
|
85
|
+
- Product: https://grai.page
|
|
86
|
+
- Source: https://github.com/adrianpeticila/grai
|
|
87
|
+
- License: MIT
|
grai_mcp-0.1.0/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# grai-gate MCP server
|
|
2
|
+
|
|
3
|
+
<!-- mcp-name: io.github.adrianpeticila/grai-mcp -->
|
|
4
|
+
|
|
5
|
+
Deterministic cadence scoring and cryptographic seal verification for AI-generated
|
|
6
|
+
drafts, exposed as a Model Context Protocol server over stdio.
|
|
7
|
+
|
|
8
|
+
No API key needed for scoring. The gate is a pure Python scorer with no
|
|
9
|
+
dependencies outside the standard library.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
uvx --from grai-mcp grai-gate-mcp
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Or with pip:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install grai-mcp
|
|
21
|
+
grai-gate-mcp
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Configure your client
|
|
25
|
+
|
|
26
|
+
Claude Desktop, Cursor, Cline, Windsurf and anything else that reads `mcpServers`:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"mcpServers": {
|
|
31
|
+
"grai-gate": {
|
|
32
|
+
"command": "uvx",
|
|
33
|
+
"args": ["--from", "grai-mcp", "grai-gate-mcp"]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Tools
|
|
40
|
+
|
|
41
|
+
| Tool | What it does | Needs network |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| `grai_score_draft` | Scores a draft, returns score, sentence-length CV, failed rules | no |
|
|
44
|
+
| `grai_issue_agency_seal` | Audits a client draft and returns a public verification link | yes |
|
|
45
|
+
| `grai_verify_seal` | Verifies a signed seal record against the public keyring | yes |
|
|
46
|
+
|
|
47
|
+
`grai_score_draft` runs entirely offline. If the local scorer cannot load, it
|
|
48
|
+
falls back to the hosted endpoint.
|
|
49
|
+
|
|
50
|
+
## Example
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{"name": "grai_score_draft", "arguments": {"text": "Your draft goes here."}}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The response carries the score, the CV, the rules that failed, and upgrade
|
|
57
|
+
links. A score of 85 or higher passes.
|
|
58
|
+
|
|
59
|
+
## What the gate checks
|
|
60
|
+
|
|
61
|
+
Sentence-length variance (CV), contrastive negation, epiphany openers,
|
|
62
|
+
corporate slop words, em dashes, structural monotony, and five other
|
|
63
|
+
deterministic rules. Same engine as the `grai-gate` CLI, so scores match
|
|
64
|
+
between the CLI and the MCP server.
|
|
65
|
+
|
|
66
|
+
## Links
|
|
67
|
+
|
|
68
|
+
- Product: https://grai.page
|
|
69
|
+
- Source: https://github.com/adrianpeticila/grai
|
|
70
|
+
- License: MIT
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "grai-mcp"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Deterministic cadence gate and cryptographic seal verification as an MCP server"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.9"
|
|
7
|
+
license = { text = "MIT" }
|
|
8
|
+
authors = [{ name = "grai", email = "hello@grai.page" }]
|
|
9
|
+
keywords = ["mcp", "model-context-protocol", "writing", "linter", "cadence", "ai-slop"]
|
|
10
|
+
classifiers = [
|
|
11
|
+
"Programming Language :: Python :: 3",
|
|
12
|
+
"License :: OSI Approved :: MIT License",
|
|
13
|
+
"Operating System :: OS Independent",
|
|
14
|
+
]
|
|
15
|
+
dependencies = []
|
|
16
|
+
|
|
17
|
+
[project.urls]
|
|
18
|
+
Homepage = "https://grai.page"
|
|
19
|
+
Repository = "https://github.com/adrianpeticila/grai"
|
|
20
|
+
Issues = "https://github.com/adrianpeticila/grai/issues"
|
|
21
|
+
|
|
22
|
+
[project.scripts]
|
|
23
|
+
grai-gate-mcp = "grai_mcp.server:main"
|
|
24
|
+
|
|
25
|
+
[build-system]
|
|
26
|
+
requires = ["hatchling"]
|
|
27
|
+
build-backend = "hatchling.build"
|
|
28
|
+
|
|
29
|
+
[tool.hatch.build.targets.wheel]
|
|
30
|
+
packages = ["src/grai_mcp"]
|