audigeo-mcp 0.1.2__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.
- audigeo_mcp-0.1.2/.gitignore +11 -0
- audigeo_mcp-0.1.2/PKG-INFO +167 -0
- audigeo_mcp-0.1.2/README.md +147 -0
- audigeo_mcp-0.1.2/build/build_mcpb.sh +70 -0
- audigeo_mcp-0.1.2/build/build_plugin.sh +55 -0
- audigeo_mcp-0.1.2/build/build_wheel.sh +24 -0
- audigeo_mcp-0.1.2/claude_code_plugin/.claude-plugin/plugin.json +13 -0
- audigeo_mcp-0.1.2/claude_code_plugin/.mcp.json +11 -0
- audigeo_mcp-0.1.2/claude_code_plugin/README.md +64 -0
- audigeo_mcp-0.1.2/claude_code_plugin/agents/audigeo-strategist.md +50 -0
- audigeo_mcp-0.1.2/claude_code_plugin/commands/audigeo-audit.md +19 -0
- audigeo_mcp-0.1.2/claude_code_plugin/commands/audigeo-content.md +26 -0
- audigeo_mcp-0.1.2/claude_code_plugin/commands/audigeo-monitor.md +22 -0
- audigeo_mcp-0.1.2/claude_code_plugin/commands/audigeo-status.md +21 -0
- audigeo_mcp-0.1.2/claude_code_plugin/skills/audigeo-audit/SKILL.md +55 -0
- audigeo_mcp-0.1.2/claude_code_plugin/skills/audigeo-bot-analytics/SKILL.md +56 -0
- audigeo_mcp-0.1.2/claude_code_plugin/skills/audigeo-brand-profile/SKILL.md +64 -0
- audigeo_mcp-0.1.2/claude_code_plugin/skills/audigeo-content-gen/SKILL.md +57 -0
- audigeo_mcp-0.1.2/claude_code_plugin/skills/audigeo-hallucination-triage/SKILL.md +56 -0
- audigeo_mcp-0.1.2/claude_code_plugin/skills/audigeo-monitoring/SKILL.md +62 -0
- audigeo_mcp-0.1.2/claude_code_plugin/skills/audigeo-overview/SKILL.md +50 -0
- audigeo_mcp-0.1.2/mcpb/README.md +57 -0
- audigeo_mcp-0.1.2/mcpb/icon.png +0 -0
- audigeo_mcp-0.1.2/mcpb/manifest.json +105 -0
- audigeo_mcp-0.1.2/mcpb/server/bootstrap.py +151 -0
- audigeo_mcp-0.1.2/pyproject.toml +46 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/__init__.py +8 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/__main__.py +13 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/client.py +194 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/config.py +62 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/context.py +37 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/prompts/__init__.py +8 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/prompts/audigeo_prompts.py +200 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/resources/__init__.py +8 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/resources/audit.py +89 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/resources/monitoring.py +57 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/resources/report.py +56 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/server.py +115 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/__init__.py +6 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/alerts.py +31 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/audit.py +87 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/brand_profile.py +57 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/content.py +106 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/hallucinations.py +40 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/monitoring.py +98 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/sites.py +44 -0
- audigeo_mcp-0.1.2/src/audigeo_mcp/tools/workflows.py +160 -0
- audigeo_mcp-0.1.2/tests/__init__.py +0 -0
- audigeo_mcp-0.1.2/tests/conftest.py +43 -0
- audigeo_mcp-0.1.2/tests/test_client.py +139 -0
- audigeo_mcp-0.1.2/tests/test_config.py +56 -0
- audigeo_mcp-0.1.2/tests/test_context.py +40 -0
- audigeo_mcp-0.1.2/tests/test_resources.py +69 -0
- audigeo_mcp-0.1.2/tests/test_workflows.py +126 -0
- audigeo_mcp-0.1.2/uv.lock +1208 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: audigeo-mcp
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: AudiGEO MCP server — exposes AudiGEO.ai capabilities (audits, monitoring, hallucinations, content) to MCP-compatible agents.
|
|
5
|
+
Author-email: Sponge Theory <support@audigeo.ai>
|
|
6
|
+
License: SPONGE THEORY PROPRIETARY LICENSE
|
|
7
|
+
Keywords: ai-monitoring,audigeo,claude,geo,mcp,sponge-theory
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Requires-Dist: httpx<1,>=0.27
|
|
10
|
+
Requires-Dist: mcp[cli]>=1.2.0
|
|
11
|
+
Requires-Dist: pydantic-settings<3,>=2.2
|
|
12
|
+
Requires-Dist: pydantic<3,>=2.6
|
|
13
|
+
Provides-Extra: dev
|
|
14
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
15
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
16
|
+
Requires-Dist: pytest-httpx>=0.30; extra == 'dev'
|
|
17
|
+
Requires-Dist: pytest>=8; extra == 'dev'
|
|
18
|
+
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
# audigeo-mcp
|
|
22
|
+
|
|
23
|
+
MCP server exposing the **AudiGEO.ai** GEO platform to MCP-compatible agents
|
|
24
|
+
(Claude Code, Claude Desktop, and any other MCP host).
|
|
25
|
+
|
|
26
|
+
Talks to the existing AudiGEO REST API at `https://audigeo.ai/api/v1` using
|
|
27
|
+
an organization-level API key sent as `Authorization: Bearer <key>`. Requires
|
|
28
|
+
plan **Pro** or **Agency**.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## What's exposed (v0.1.1)
|
|
33
|
+
|
|
34
|
+
**26 tools** across 8 modules, **3 resources**, and **3 prompt templates**.
|
|
35
|
+
All tool names are prefixed `audigeo_` so they don't collide with tools from
|
|
36
|
+
other MCP servers a host might have mounted.
|
|
37
|
+
|
|
38
|
+
| Module | Tool | Type |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `sites` | `audigeo_list_sites` | read |
|
|
41
|
+
| | `audigeo_get_site` | read |
|
|
42
|
+
| | `audigeo_create_site` | write |
|
|
43
|
+
| `audit` | `audigeo_list_audits` | read |
|
|
44
|
+
| | `audigeo_get_audit` | read (composite) |
|
|
45
|
+
| | `audigeo_list_recommendations` | read |
|
|
46
|
+
| | `audigeo_launch_audit` | write |
|
|
47
|
+
| `brand_profile` | `audigeo_get_brand_profile` | read |
|
|
48
|
+
| | `audigeo_update_brand_profile` | write |
|
|
49
|
+
| `monitoring` | `audigeo_get_monitoring_kpis` | read |
|
|
50
|
+
| | `audigeo_get_monitoring_results` | read |
|
|
51
|
+
| | `audigeo_get_competitors_analysis` | read |
|
|
52
|
+
| | `audigeo_get_citations_gap` | read |
|
|
53
|
+
| | `audigeo_run_monitoring_now` | write |
|
|
54
|
+
| `hallucinations` | `audigeo_list_hallucinations` | read |
|
|
55
|
+
| | `audigeo_get_hallucination_stats` | read |
|
|
56
|
+
| `content` | `audigeo_list_content` | read |
|
|
57
|
+
| | `audigeo_get_content` | read |
|
|
58
|
+
| | `audigeo_generate_content` | write |
|
|
59
|
+
| | `audigeo_generate_markdown_mirror` | write |
|
|
60
|
+
| `alerts` | `audigeo_list_alerts` | read |
|
|
61
|
+
| | `audigeo_mark_alert_read` | write |
|
|
62
|
+
| `workflows` | `audigeo_audit_executive_summary` | composite |
|
|
63
|
+
| | `audigeo_brand_safety_check` | composite |
|
|
64
|
+
| | `audigeo_competitive_analysis` | composite |
|
|
65
|
+
| | `audigeo_geo_action_plan` | composite |
|
|
66
|
+
|
|
67
|
+
**Resources** (URI-addressable, read-only): `audigeo://audits/{audit_id}`,
|
|
68
|
+
`audigeo://monitoring/results/{site_id}`, `audigeo://reports/{report_id}`.
|
|
69
|
+
|
|
70
|
+
**Prompts**: `geo_audit_briefing`, `monitoring_weekly_recap`,
|
|
71
|
+
`hallucination_response_draft` — all fr/en/es.
|
|
72
|
+
|
|
73
|
+
Set `AUDIGEO_READ_ONLY=true` to disable every write tool at startup.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Configuration
|
|
78
|
+
|
|
79
|
+
| Env var | Required | Default | Purpose |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| `AUDIGEO_API_KEY` | yes | — | Your AudiGEO API key (`agk_...`). Generate at https://audigeo.ai → Settings → API Keys. |
|
|
82
|
+
| `AUDIGEO_API_URL` | no | `https://audigeo.ai/api/v1` | Override for staging / self-hosted. |
|
|
83
|
+
| `AUDIGEO_READ_ONLY` | no | `false` | Disable write tools. |
|
|
84
|
+
| `AUDIGEO_DEFAULT_SITE_ID` | no | — | UUID used when an agent omits `site_id`. |
|
|
85
|
+
| `AUDIGEO_TIMEOUT_S` | no | `60` | Per-request timeout. |
|
|
86
|
+
| `AUDIGEO_LOG_LEVEL` | no | `INFO` | DEBUG / INFO / WARNING / ERROR / CRITICAL. |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Use from Claude Desktop
|
|
91
|
+
|
|
92
|
+
Install the AudiGEO `.mcpb` bundle (downloadable from Settings → Intégrations
|
|
93
|
+
Claude on audigeo.ai). Claude Desktop will prompt for your API key on
|
|
94
|
+
install — no manual config, no Python prerequisite (the bundle provisions its
|
|
95
|
+
own environment on first launch).
|
|
96
|
+
|
|
97
|
+
## Use from Claude Code
|
|
98
|
+
|
|
99
|
+
Two ways to install, from most to least automated:
|
|
100
|
+
|
|
101
|
+
**Via the Sponge Theory marketplace:**
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/plugin marketplace add ezeeFlop/audigeo
|
|
105
|
+
/plugin install audigeo@sponge-theory
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Manually**, from the downloaded `audigeo-claude-code-<version>.tar.gz`
|
|
109
|
+
(Settings → Intégrations Claude on audigeo.ai):
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
mkdir -p ~/.claude/plugins
|
|
113
|
+
tar -xzf audigeo-claude-code-*.tar.gz -C ~/.claude/plugins/
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Either way, the plugin's `.mcp.json` launches the server via
|
|
117
|
+
`uv tool run --from <plugin>/server audigeo-mcp` — **`uv` must be installed**
|
|
118
|
+
(https://docs.astral.sh/uv/getting-started/installation/), but no `pip
|
|
119
|
+
install` of `audigeo-mcp` is needed: `uv` builds and caches an isolated
|
|
120
|
+
environment from the bundled source on first launch.
|
|
121
|
+
|
|
122
|
+
Set your key once, then restart Claude Code:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
export AUDIGEO_API_KEY=agk_...
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Use from any other MCP host
|
|
129
|
+
|
|
130
|
+
The server speaks MCP over stdio. Point your host at:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
AUDIGEO_API_KEY=agk_... audigeo-mcp
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Development
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
cd mcp
|
|
142
|
+
uv pip install -e ".[dev]"
|
|
143
|
+
pytest -q
|
|
144
|
+
ruff check .
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Smoke test against a local AudiGEO dev server:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
export AUDIGEO_API_KEY=agk_test_$(openssl rand -hex 8)
|
|
151
|
+
export AUDIGEO_API_URL=http://localhost:8000/api/v1
|
|
152
|
+
audigeo-mcp # then send MCP frames over stdin
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Build all three distributable artifacts (wheel, .mcpb, Claude Code plugin):
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
./build/build_wheel.sh
|
|
159
|
+
./build/build_mcpb.sh
|
|
160
|
+
./build/build_plugin.sh
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## License
|
|
166
|
+
|
|
167
|
+
Sponge Theory proprietary. Distribution restricted to AudiGEO subscribers.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# audigeo-mcp
|
|
2
|
+
|
|
3
|
+
MCP server exposing the **AudiGEO.ai** GEO platform to MCP-compatible agents
|
|
4
|
+
(Claude Code, Claude Desktop, and any other MCP host).
|
|
5
|
+
|
|
6
|
+
Talks to the existing AudiGEO REST API at `https://audigeo.ai/api/v1` using
|
|
7
|
+
an organization-level API key sent as `Authorization: Bearer <key>`. Requires
|
|
8
|
+
plan **Pro** or **Agency**.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## What's exposed (v0.1.1)
|
|
13
|
+
|
|
14
|
+
**26 tools** across 8 modules, **3 resources**, and **3 prompt templates**.
|
|
15
|
+
All tool names are prefixed `audigeo_` so they don't collide with tools from
|
|
16
|
+
other MCP servers a host might have mounted.
|
|
17
|
+
|
|
18
|
+
| Module | Tool | Type |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| `sites` | `audigeo_list_sites` | read |
|
|
21
|
+
| | `audigeo_get_site` | read |
|
|
22
|
+
| | `audigeo_create_site` | write |
|
|
23
|
+
| `audit` | `audigeo_list_audits` | read |
|
|
24
|
+
| | `audigeo_get_audit` | read (composite) |
|
|
25
|
+
| | `audigeo_list_recommendations` | read |
|
|
26
|
+
| | `audigeo_launch_audit` | write |
|
|
27
|
+
| `brand_profile` | `audigeo_get_brand_profile` | read |
|
|
28
|
+
| | `audigeo_update_brand_profile` | write |
|
|
29
|
+
| `monitoring` | `audigeo_get_monitoring_kpis` | read |
|
|
30
|
+
| | `audigeo_get_monitoring_results` | read |
|
|
31
|
+
| | `audigeo_get_competitors_analysis` | read |
|
|
32
|
+
| | `audigeo_get_citations_gap` | read |
|
|
33
|
+
| | `audigeo_run_monitoring_now` | write |
|
|
34
|
+
| `hallucinations` | `audigeo_list_hallucinations` | read |
|
|
35
|
+
| | `audigeo_get_hallucination_stats` | read |
|
|
36
|
+
| `content` | `audigeo_list_content` | read |
|
|
37
|
+
| | `audigeo_get_content` | read |
|
|
38
|
+
| | `audigeo_generate_content` | write |
|
|
39
|
+
| | `audigeo_generate_markdown_mirror` | write |
|
|
40
|
+
| `alerts` | `audigeo_list_alerts` | read |
|
|
41
|
+
| | `audigeo_mark_alert_read` | write |
|
|
42
|
+
| `workflows` | `audigeo_audit_executive_summary` | composite |
|
|
43
|
+
| | `audigeo_brand_safety_check` | composite |
|
|
44
|
+
| | `audigeo_competitive_analysis` | composite |
|
|
45
|
+
| | `audigeo_geo_action_plan` | composite |
|
|
46
|
+
|
|
47
|
+
**Resources** (URI-addressable, read-only): `audigeo://audits/{audit_id}`,
|
|
48
|
+
`audigeo://monitoring/results/{site_id}`, `audigeo://reports/{report_id}`.
|
|
49
|
+
|
|
50
|
+
**Prompts**: `geo_audit_briefing`, `monitoring_weekly_recap`,
|
|
51
|
+
`hallucination_response_draft` — all fr/en/es.
|
|
52
|
+
|
|
53
|
+
Set `AUDIGEO_READ_ONLY=true` to disable every write tool at startup.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Configuration
|
|
58
|
+
|
|
59
|
+
| Env var | Required | Default | Purpose |
|
|
60
|
+
|---|---|---|---|
|
|
61
|
+
| `AUDIGEO_API_KEY` | yes | — | Your AudiGEO API key (`agk_...`). Generate at https://audigeo.ai → Settings → API Keys. |
|
|
62
|
+
| `AUDIGEO_API_URL` | no | `https://audigeo.ai/api/v1` | Override for staging / self-hosted. |
|
|
63
|
+
| `AUDIGEO_READ_ONLY` | no | `false` | Disable write tools. |
|
|
64
|
+
| `AUDIGEO_DEFAULT_SITE_ID` | no | — | UUID used when an agent omits `site_id`. |
|
|
65
|
+
| `AUDIGEO_TIMEOUT_S` | no | `60` | Per-request timeout. |
|
|
66
|
+
| `AUDIGEO_LOG_LEVEL` | no | `INFO` | DEBUG / INFO / WARNING / ERROR / CRITICAL. |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Use from Claude Desktop
|
|
71
|
+
|
|
72
|
+
Install the AudiGEO `.mcpb` bundle (downloadable from Settings → Intégrations
|
|
73
|
+
Claude on audigeo.ai). Claude Desktop will prompt for your API key on
|
|
74
|
+
install — no manual config, no Python prerequisite (the bundle provisions its
|
|
75
|
+
own environment on first launch).
|
|
76
|
+
|
|
77
|
+
## Use from Claude Code
|
|
78
|
+
|
|
79
|
+
Two ways to install, from most to least automated:
|
|
80
|
+
|
|
81
|
+
**Via the Sponge Theory marketplace:**
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
/plugin marketplace add ezeeFlop/audigeo
|
|
85
|
+
/plugin install audigeo@sponge-theory
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Manually**, from the downloaded `audigeo-claude-code-<version>.tar.gz`
|
|
89
|
+
(Settings → Intégrations Claude on audigeo.ai):
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
mkdir -p ~/.claude/plugins
|
|
93
|
+
tar -xzf audigeo-claude-code-*.tar.gz -C ~/.claude/plugins/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Either way, the plugin's `.mcp.json` launches the server via
|
|
97
|
+
`uv tool run --from <plugin>/server audigeo-mcp` — **`uv` must be installed**
|
|
98
|
+
(https://docs.astral.sh/uv/getting-started/installation/), but no `pip
|
|
99
|
+
install` of `audigeo-mcp` is needed: `uv` builds and caches an isolated
|
|
100
|
+
environment from the bundled source on first launch.
|
|
101
|
+
|
|
102
|
+
Set your key once, then restart Claude Code:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
export AUDIGEO_API_KEY=agk_...
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Use from any other MCP host
|
|
109
|
+
|
|
110
|
+
The server speaks MCP over stdio. Point your host at:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
AUDIGEO_API_KEY=agk_... audigeo-mcp
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Development
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
cd mcp
|
|
122
|
+
uv pip install -e ".[dev]"
|
|
123
|
+
pytest -q
|
|
124
|
+
ruff check .
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Smoke test against a local AudiGEO dev server:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
export AUDIGEO_API_KEY=agk_test_$(openssl rand -hex 8)
|
|
131
|
+
export AUDIGEO_API_URL=http://localhost:8000/api/v1
|
|
132
|
+
audigeo-mcp # then send MCP frames over stdin
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Build all three distributable artifacts (wheel, .mcpb, Claude Code plugin):
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
./build/build_wheel.sh
|
|
139
|
+
./build/build_mcpb.sh
|
|
140
|
+
./build/build_plugin.sh
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## License
|
|
146
|
+
|
|
147
|
+
Sponge Theory proprietary. Distribution restricted to AudiGEO subscribers.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Build the Claude Desktop MCPB bundle from mcp/mcpb/.
|
|
3
|
+
# Output: mcp/dist/audigeo-<VERSION>.mcpb (zip file with renamed extension)
|
|
4
|
+
#
|
|
5
|
+
# Usage: ./build_mcpb.sh
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
MCP_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
10
|
+
cd "$MCP_DIR"
|
|
11
|
+
|
|
12
|
+
VERSION=$(grep -E "^version" pyproject.toml | head -1 | sed -E 's/.*"([^"]+)".*/\1/')
|
|
13
|
+
if [ -z "$VERSION" ]; then
|
|
14
|
+
echo "ERROR: cannot parse version from pyproject.toml" >&2
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
mkdir -p dist
|
|
19
|
+
OUT="${MCP_DIR}/dist/audigeo-${VERSION}.mcpb"
|
|
20
|
+
|
|
21
|
+
if [ ! -d "mcpb" ]; then
|
|
22
|
+
echo "ERROR: mcpb/ template missing" >&2
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
STAGE=$(mktemp -d)
|
|
27
|
+
trap 'rm -rf "$STAGE"' EXIT
|
|
28
|
+
|
|
29
|
+
cp -R mcpb/* "$STAGE/"
|
|
30
|
+
|
|
31
|
+
# Embed the server source so the bundle is self-contained
|
|
32
|
+
mkdir -p "$STAGE/server"
|
|
33
|
+
cp -R src "$STAGE/server/src"
|
|
34
|
+
cp pyproject.toml "$STAGE/server/pyproject.toml"
|
|
35
|
+
cp README.md "$STAGE/server/README.md"
|
|
36
|
+
|
|
37
|
+
# Bundle the wheel so bootstrap.py can provision dependencies on the user's
|
|
38
|
+
# machine at first run (pip resolves the correct per-platform binaries —
|
|
39
|
+
# vendoring compiled deps like pydantic-core into one cross-platform bundle is
|
|
40
|
+
# not possible). Build the wheel first if it isn't in dist/ yet.
|
|
41
|
+
mkdir -p "$STAGE/server/wheels"
|
|
42
|
+
WHEEL=$(ls -t dist/audigeo_mcp-*.whl 2>/dev/null | head -1 || true)
|
|
43
|
+
if [ -z "${WHEEL:-}" ]; then
|
|
44
|
+
echo "No wheel in dist/ — building it first…"
|
|
45
|
+
"$(dirname "$0")/build_wheel.sh" >/dev/null
|
|
46
|
+
WHEEL=$(ls -t dist/audigeo_mcp-*.whl 2>/dev/null | head -1 || true)
|
|
47
|
+
fi
|
|
48
|
+
if [ -z "${WHEEL:-}" ]; then
|
|
49
|
+
echo "ERROR: could not build/find the audigeo_mcp wheel" >&2
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
cp "$WHEEL" "$STAGE/server/wheels/"
|
|
53
|
+
echo "Bundled wheel: $(basename "$WHEEL")"
|
|
54
|
+
|
|
55
|
+
# Inject version into manifest.json
|
|
56
|
+
MANIFEST="$STAGE/manifest.json"
|
|
57
|
+
if [ -f "$MANIFEST" ]; then
|
|
58
|
+
/usr/bin/sed -i.bak -E "s/\"version\": *\"[^\"]+\"/\"version\": \"${VERSION}\"/" "$MANIFEST"
|
|
59
|
+
rm -f "${MANIFEST}.bak"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Strip macOS metadata
|
|
63
|
+
find "$STAGE" -name '.DS_Store' -delete 2>/dev/null || true
|
|
64
|
+
find "$STAGE" -name '__pycache__' -type d -exec rm -rf {} + 2>/dev/null || true
|
|
65
|
+
|
|
66
|
+
# .mcpb is just a zip
|
|
67
|
+
rm -f "$OUT"
|
|
68
|
+
(cd "$STAGE" && zip -qr "$OUT" .)
|
|
69
|
+
|
|
70
|
+
echo "Built: $OUT ($(du -h "$OUT" | awk '{print $1}'))"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Build the Claude Code plugin tar.gz from mcp/claude_code_plugin/.
|
|
3
|
+
# Output: mcp/dist/audigeo-claude-code-<VERSION>.tar.gz
|
|
4
|
+
#
|
|
5
|
+
# Usage: ./build_plugin.sh
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
MCP_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
10
|
+
cd "$MCP_DIR"
|
|
11
|
+
|
|
12
|
+
# Read version from pyproject.toml
|
|
13
|
+
VERSION=$(grep -E "^version" pyproject.toml | head -1 | sed -E 's/.*"([^"]+)".*/\1/')
|
|
14
|
+
if [ -z "$VERSION" ]; then
|
|
15
|
+
echo "ERROR: cannot parse version from pyproject.toml" >&2
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
mkdir -p dist
|
|
20
|
+
OUT="dist/audigeo-claude-code-${VERSION}.tar.gz"
|
|
21
|
+
|
|
22
|
+
if [ ! -d "claude_code_plugin" ]; then
|
|
23
|
+
echo "ERROR: claude_code_plugin/ template missing" >&2
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Stage to a temp dir so the tarball has a clean top-level directory
|
|
28
|
+
STAGE=$(mktemp -d)
|
|
29
|
+
trap 'rm -rf "$STAGE"' EXIT
|
|
30
|
+
cp -R claude_code_plugin "${STAGE}/audigeo"
|
|
31
|
+
|
|
32
|
+
# Inject version into .claude-plugin/plugin.json
|
|
33
|
+
PLUGIN_JSON="${STAGE}/audigeo/.claude-plugin/plugin.json"
|
|
34
|
+
if [ -f "$PLUGIN_JSON" ]; then
|
|
35
|
+
/usr/bin/sed -i.bak -E "s/\"version\": *\"[^\"]+\"/\"version\": \"${VERSION}\"/" "$PLUGIN_JSON"
|
|
36
|
+
rm -f "${PLUGIN_JSON}.bak"
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Bundle the MCP server SOURCE (not a wheel) under server/, so .mcp.json's
|
|
40
|
+
# `uv tool run --from ${CLAUDE_PLUGIN_ROOT}/server audigeo-mcp` can build and
|
|
41
|
+
# run it with no PyPI publish and no pre-existing venv on the user's machine —
|
|
42
|
+
# uv resolves the interpreter, builds an isolated env, and caches it per
|
|
43
|
+
# server/ content hash. Mirrors what build_mcpb.sh does for the .mcpb bundle.
|
|
44
|
+
SERVER_DIR="${STAGE}/audigeo/server"
|
|
45
|
+
mkdir -p "$SERVER_DIR"
|
|
46
|
+
cp -R src "$SERVER_DIR/src"
|
|
47
|
+
cp pyproject.toml "$SERVER_DIR/pyproject.toml"
|
|
48
|
+
cp README.md "$SERVER_DIR/README.md"
|
|
49
|
+
|
|
50
|
+
# Strip macOS metadata and caches
|
|
51
|
+
find "$STAGE" -name '.DS_Store' -delete 2>/dev/null || true
|
|
52
|
+
find "$STAGE" -name '__pycache__' -type d -exec rm -rf {} + 2>/dev/null || true
|
|
53
|
+
|
|
54
|
+
tar -czf "$OUT" -C "$STAGE" audigeo
|
|
55
|
+
echo "Built: $OUT ($(du -h "$OUT" | awk '{print $1}'))"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Build the audigeo-mcp Python wheel.
|
|
3
|
+
# Output: mcp/dist/audigeo_mcp-<VERSION>-py3-none-any.whl + .tar.gz
|
|
4
|
+
#
|
|
5
|
+
# Usage: ./build_wheel.sh
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
MCP_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
10
|
+
cd "$MCP_DIR"
|
|
11
|
+
|
|
12
|
+
# Don't rm dist/ — other build scripts have already populated it
|
|
13
|
+
rm -f dist/audigeo_mcp-*.whl dist/audigeo_mcp-*.tar.gz 2>/dev/null || true
|
|
14
|
+
|
|
15
|
+
# Prefer uv (already used in the project), fall back to python -m build
|
|
16
|
+
if command -v uv >/dev/null 2>&1; then
|
|
17
|
+
uv build --wheel --sdist --out-dir dist 2>&1 | tail -5
|
|
18
|
+
else
|
|
19
|
+
"${PYTHON:-python}" -m build --wheel --sdist --outdir dist . 2>&1 | tail -5
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
echo ""
|
|
23
|
+
echo "Built artifacts:"
|
|
24
|
+
ls -lh dist/audigeo_mcp-*.whl dist/audigeo_mcp-*.tar.gz 2>/dev/null
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "audigeo",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "AudiGEO.ai — audit GEO, monitoring IA, hallucinations, génération de contenu, depuis Claude Code.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Sponge Theory",
|
|
7
|
+
"email": "support@audigeo.ai",
|
|
8
|
+
"url": "https://audigeo.ai"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://audigeo.ai",
|
|
11
|
+
"license": "Sponge Theory Proprietary",
|
|
12
|
+
"keywords": ["geo", "seo", "ai-monitoring", "audigeo", "sponge-theory"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# AudiGEO Claude Code plugin
|
|
2
|
+
|
|
3
|
+
GEO audits, AI-platform monitoring, hallucination detection, and content
|
|
4
|
+
generation, accessible directly inside Claude Code.
|
|
5
|
+
|
|
6
|
+
## Install
|
|
7
|
+
|
|
8
|
+
**Via the Sponge Theory marketplace (recommended):**
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
/plugin marketplace add ezeeFlop/audigeo
|
|
12
|
+
/plugin install audigeo@sponge-theory
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Manually**, from the downloaded `audigeo-claude-code-<version>.tar.gz`
|
|
16
|
+
(https://audigeo.ai → Settings → Intégrations Claude):
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
mkdir -p ~/.claude/plugins
|
|
20
|
+
tar -xzf audigeo-claude-code-*.tar.gz -C ~/.claude/plugins/
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Either way, the bundled `.mcp.json` launches the MCP server via
|
|
24
|
+
`uv tool run --from <plugin>/server audigeo-mcp` — **you need `uv` installed**
|
|
25
|
+
(https://docs.astral.sh/uv/getting-started/installation/). No `pip install`
|
|
26
|
+
needed: `uv` builds and caches an isolated environment from the bundled
|
|
27
|
+
server source on first launch.
|
|
28
|
+
|
|
29
|
+
## Configure
|
|
30
|
+
|
|
31
|
+
Set your API key (generate at https://audigeo.ai → Settings → API Keys,
|
|
32
|
+
requires plan Pro or Agency) in your shell environment before starting Claude
|
|
33
|
+
Code:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
export AUDIGEO_API_KEY=agk_...
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Restart Claude Code. Try `/audigeo-status` to verify.
|
|
40
|
+
|
|
41
|
+
## What's included
|
|
42
|
+
|
|
43
|
+
- **MCP server**: 26 tools, 3 resources, 3 prompt templates (see
|
|
44
|
+
https://audigeo.ai/docs/mcp for the complete list).
|
|
45
|
+
- **7 skills**: contextual guidance the agent loads on demand (audit,
|
|
46
|
+
monitoring, hallucination triage, brand profile, content generation, bot
|
|
47
|
+
analytics, product overview).
|
|
48
|
+
- **4 slash commands**: `/audigeo-status`, `/audigeo-audit`,
|
|
49
|
+
`/audigeo-monitor`, `/audigeo-content`.
|
|
50
|
+
- **Subagent `audigeo-strategist`**: an in-house GEO expert agent with the
|
|
51
|
+
full toolkit at its disposal.
|
|
52
|
+
|
|
53
|
+
## Configuration
|
|
54
|
+
|
|
55
|
+
| Env var | Default | Purpose |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| `AUDIGEO_API_KEY` | — (required) | Your AudiGEO API key (`agk_...`). |
|
|
58
|
+
| `AUDIGEO_API_URL` | `https://audigeo.ai/api/v1` | Override for staging/self-hosted — export it in your shell if you need a non-default value. |
|
|
59
|
+
| `AUDIGEO_READ_ONLY` | `false` | When `true`, disables every write tool. |
|
|
60
|
+
| `AUDIGEO_DEFAULT_SITE_ID` | — | UUID used when an agent omits `site_id`. |
|
|
61
|
+
|
|
62
|
+
## License
|
|
63
|
+
|
|
64
|
+
Sponge Theory proprietary. Distribution restricted to AudiGEO subscribers.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audigeo-strategist
|
|
3
|
+
description: Use proactively for any question that needs a holistic GEO strategy across audit + monitoring + content + hallucinations — when the user asks "what should I do overall about my AI visibility", "give me a quarterly plan", "audit my whole AudiGEO setup", or wants a senior GEO consultant's POV. This subagent runs deeper analyses than a single tool call would.
|
|
4
|
+
tools: ["mcp__audigeo__*"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Tu es un consultant senior en Generative Engine Optimization, déployé en tant que sub-agent dans Claude Code. Tu as accès à tous les outils MCP `audigeo_*` du serveur AudiGEO de l'utilisateur (audits, monitoring, hallucinations, contenu, brand profile, alerts, workflows composites).
|
|
8
|
+
|
|
9
|
+
## Mission
|
|
10
|
+
|
|
11
|
+
Quand on t'invoque, l'utilisateur cherche une vue d'ensemble stratégique, pas une réponse ponctuelle à un outil. Ton job est de :
|
|
12
|
+
|
|
13
|
+
1. **Diagnostiquer** : collecter l'état actuel sur les 4 axes (audit, monitoring, hallucinations, contenu) via plusieurs outils.
|
|
14
|
+
2. **Synthétiser** : repérer les patterns transverses (ex: "audit faible sur Schema.org + monitoring faible sur Gemini = besoin de structurer la donnée").
|
|
15
|
+
3. **Prioriser** : donner un plan d'action sur 3 horizons (cette semaine, ce mois, ce trimestre).
|
|
16
|
+
|
|
17
|
+
## Méthode
|
|
18
|
+
|
|
19
|
+
À chaque invocation, exécute ce flow :
|
|
20
|
+
|
|
21
|
+
1. `audigeo_list_sites` — quels sites sont configurés
|
|
22
|
+
2. Pour le site principal : `audigeo_list_audits(site_id, limit=1)` puis `audigeo_get_audit(latest_audit_id)`
|
|
23
|
+
3. `audigeo_get_monitoring_kpis(site_id, days=30)`
|
|
24
|
+
4. `audigeo_competitive_analysis(site_id, days=30)`
|
|
25
|
+
5. `audigeo_get_citations_gap(site_id)`
|
|
26
|
+
6. `audigeo_brand_safety_check(days=14)`
|
|
27
|
+
7. `audigeo_get_brand_profile`
|
|
28
|
+
8. `audigeo_list_alerts(unread_only=True)` — pour voir s'il y a des alertes ouvertes critiques
|
|
29
|
+
|
|
30
|
+
## Format de sortie
|
|
31
|
+
|
|
32
|
+
Markdown structuré en français :
|
|
33
|
+
|
|
34
|
+
- **Synthèse** (2-3 paragraphes) : le diagnostic global, en langage business.
|
|
35
|
+
- **Forces actuelles** : ce qui marche déjà, à conserver.
|
|
36
|
+
- **Faiblesses prioritaires** : 3-5 zones à corriger, ordonnées par leverage.
|
|
37
|
+
- **Plan d'action 90 jours** :
|
|
38
|
+
- **Semaine 1-2** : 2-3 actions tactiques (quick wins P0 de l'audit + correction des hallucinations critiques).
|
|
39
|
+
- **Mois 1-3** : 4-5 actions structurelles (renforcer Schema.org, déployer Markdown Mirrors, presse/Wikipédia, prompts monitoring élargis).
|
|
40
|
+
- **Trimestre suivant** : 2-3 paris (nouveau contenu majeur, repositionnement Brand Profile, etc.).
|
|
41
|
+
- **KPIs à suivre** : les 3 chiffres à surveiller au prochain check-in (avec valeurs cibles).
|
|
42
|
+
|
|
43
|
+
## Anti-patterns
|
|
44
|
+
|
|
45
|
+
- **Ne pas** te contenter de relayer le résultat d'un seul outil — ton job est l'analyse transverse.
|
|
46
|
+
- **Ne pas** inventer de chiffres : si une donnée manque, dis "non disponible" et précise quel outil ne l'a pas retournée.
|
|
47
|
+
- **Ne pas** mélanger les niveaux : un audit faible n'est pas la même question qu'un Share of Voice faible. Traite-les séparément.
|
|
48
|
+
- **Ne pas** déclencher d'écriture (audit, génération de contenu, modification du profil) sans confirmation explicite de l'utilisateur principal qui t'a invoqué.
|
|
49
|
+
|
|
50
|
+
Ton ton : expert posé, en français, factuel. Pas de jargon marketing creux. Tu parles à un dirigeant ou un responsable marketing qui doit décider d'investir du temps ou du budget.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Lance un audit GEO sur un site et présente le résultat dès qu'il est prêt.
|
|
3
|
+
argument-hint: "<site_id ou URL>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Tu vas lancer un audit GEO et restituer le résultat. L'utilisateur t'a passé un identifiant de site ou une URL en argument : $ARGUMENTS.
|
|
7
|
+
|
|
8
|
+
1. Si l'argument ressemble à une URL (commence par `http`), commence par `audigeo_list_sites` et trouve le site correspondant. Si aucun ne match, propose à l'utilisateur de créer le site d'abord (`audigeo_create_site` — demande confirmation avant).
|
|
9
|
+
2. Sinon, traite l'argument comme un `site_id` UUID.
|
|
10
|
+
3. Lance l'audit : `audigeo_launch_audit(site_id)`. Récupère l'`audit_id` retourné.
|
|
11
|
+
4. Indique à l'utilisateur que l'audit est en cours (durée typique 5-15 min).
|
|
12
|
+
5. **Poll** `audigeo_get_audit(audit_id)` toutes les 60s jusqu'à ce que `status` soit `COMPLETED` ou `FAILED` (max 20 tentatives = 20 min).
|
|
13
|
+
6. Une fois `COMPLETED` :
|
|
14
|
+
- Présente les 4 scores (global, technique, contenu, autorité) en français.
|
|
15
|
+
- Appelle `audigeo_geo_action_plan(audit_id, max_actions=3)` pour le top 3 des priorités.
|
|
16
|
+
- Présente chaque priorité avec son `title`, `priority`, `impact`, `effort`.
|
|
17
|
+
- Termine par UNE recommandation concrète à attaquer cette semaine.
|
|
18
|
+
|
|
19
|
+
Si le quota plan est atteint (HTTP 402), indique-le et propose l'upgrade Pro/Agency.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Génère un contenu GEO optimisé (article / FAQ / llms.txt / Schema.org / etc.) pour un site.
|
|
3
|
+
argument-hint: "<type> <brief>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Tu vas générer un contenu GEO. L'utilisateur a passé : $ARGUMENTS.
|
|
7
|
+
|
|
8
|
+
Le format attendu est `<type> <brief en texte libre>` où `<type>` est l'un de :
|
|
9
|
+
- `article` — article long, markdown
|
|
10
|
+
- `faq` — FAQ avec balisage FAQPage Schema
|
|
11
|
+
- `llms_txt` — fichier llms.txt racine
|
|
12
|
+
- `llms_full_txt` — version exhaustive
|
|
13
|
+
- `robots_txt` — robots.txt avec User-agents IA
|
|
14
|
+
- `schema_org` — JSON-LD Organization / LocalBusiness / Product
|
|
15
|
+
|
|
16
|
+
Procédure :
|
|
17
|
+
|
|
18
|
+
1. Parse `$ARGUMENTS` : premier token = `<type>`, reste = `<brief>`.
|
|
19
|
+
2. Valide que le type est dans la liste autorisée. Sinon, demande à l'utilisateur de préciser.
|
|
20
|
+
3. Récupère le `site_id` : si l'utilisateur n'a pas précisé via `AUDIGEO_DEFAULT_SITE_ID`, appelle `audigeo_list_sites` et utilise le premier (ou demande).
|
|
21
|
+
4. Appelle `audigeo_generate_content(content_type=<type>, brief=<brief>, site_id=<site_id>)`.
|
|
22
|
+
5. La génération est async — tu reçois un `content_id` avec `generation_status="generating"`.
|
|
23
|
+
6. Poll `audigeo_get_content(content_id)` toutes les 15s jusqu'à `generation_status="generated"` (max 8 tentatives = 2 min).
|
|
24
|
+
7. Présente le contenu généré à l'utilisateur, formaté pour qu'il puisse le copier directement.
|
|
25
|
+
|
|
26
|
+
Si quota atteint (HTTP 402) : propose l'upgrade Agency. Si génération échoue (HTTP 500 / status `failed`) : montrer le `generation_error` et proposer de relancer.
|