cited-cli 0.3.4__tar.gz → 0.3.14__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.
- cited_cli-0.3.14/.github/workflows/changelog-guard.yml +32 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/.github/workflows/ci.yml +2 -2
- {cited_cli-0.3.4 → cited_cli-0.3.14}/.github/workflows/release.yml +12 -6
- {cited_cli-0.3.4 → cited_cli-0.3.14}/.gitignore +1 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/CLAUDE.md +25 -6
- cited_cli-0.3.14/FUTURE.md +106 -0
- cited_cli-0.3.4/README.md → cited_cli-0.3.14/PKG-INFO +58 -20
- cited_cli-0.3.4/PKG-INFO → cited_cli-0.3.14/README.md +36 -41
- {cited_cli-0.3.4 → cited_cli-0.3.14}/TEST_RUNBOOK.md +3 -9
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/CLAUDE_DESKTOP_SETUP.md +32 -13
- cited_cli-0.3.14/cited-plugins/commands/status.md +23 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/skills/business-setup/SKILL.md +1 -1
- cited_cli-0.3.14/cited-plugins/skills/explore/SKILL.md +173 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/skills/geo-recommend/SKILL.md +9 -7
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/pyproject.toml +1 -1
- cited_cli-0.3.14/packages/core/src/cited_core/__init__.py +1 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/api/endpoints.py +14 -2
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/auth/store.py +9 -4
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/config/manager.py +4 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/README.md +84 -6
- cited_cli-0.3.14/packages/mcp/SKILL.md +66 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/pyproject.toml +5 -3
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/auth_provider.py +119 -28
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/context.py +1 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/plan_gating.py +201 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/remote.py +424 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/server.py +147 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tool_changelog.yaml +328 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tool_manager.py +101 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/_helpers.py +470 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/action_plan.py +366 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/agent.py +258 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/analytics.py +162 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/tools/audit.py +144 -16
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/auth.py +305 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/billing.py +210 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/tools/business.py +101 -12
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/changelog.py +218 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/hq.py +93 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/job.py +122 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/recommend.py +454 -0
- cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/solution.py +190 -0
- cited_cli-0.3.14/packages/mcp/tests/conftest.py +98 -0
- cited_cli-0.3.14/packages/mcp/tests/test_auth_provider.py +125 -0
- cited_cli-0.3.14/packages/mcp/tests/test_plan_gating.py +146 -0
- cited_cli-0.3.14/packages/mcp/tests/test_tools.py +2321 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/pyproject.toml +5 -4
- cited_cli-0.3.14/scripts/mcp_test_harness.py +666 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/api/endpoints.py +2 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/analytics.py +15 -8
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/recommend.py +81 -0
- cited_cli-0.3.14/tests/test_feature_parity.py +193 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_mcp_server.py +40 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_mcp_tools.py +31 -6
- cited_cli-0.3.4/FUTURE.md +0 -197
- cited_cli-0.3.4/cited-plugins/commands/status.md +0 -13
- cited_cli-0.3.4/packages/core/src/cited_core/__init__.py +0 -1
- cited_cli-0.3.4/packages/mcp/Dockerfile +0 -14
- cited_cli-0.3.4/packages/mcp/SKILL.md +0 -54
- cited_cli-0.3.4/packages/mcp/src/cited_mcp/remote.py +0 -159
- cited_cli-0.3.4/packages/mcp/src/cited_mcp/server.py +0 -77
- cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/_helpers.py +0 -106
- cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/auth.py +0 -135
- cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/job.py +0 -61
- cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/recommend.py +0 -133
- cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/solution.py +0 -102
- cited_cli-0.3.4/scripts/cleanup_dev.py +0 -246
- cited_cli-0.3.4/scripts/deploy-mcp.sh +0 -434
- cited_cli-0.3.4/scripts/release.sh +0 -242
- {cited_cli-0.3.4 → cited_cli-0.3.14}/DEMO.md +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/LICENSE +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/.claude-plugin/marketplace.json +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/.claude-plugin/plugin.json +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/.mcp.json +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/agents/geo-analyst.md +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/commands/audit.md +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/commands/recommend.md +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/settings.json +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/skills/geo-audit/SKILL.md +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/api/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/api/client.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/auth/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/auth/oauth_server.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/config/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/config/constants.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/errors.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/__main__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/tools/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/scripts/dev-install.sh +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/__main__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/api/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/api/client.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/app.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/auth/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/auth/oauth_server.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/auth/store.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/agent.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/audit.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/auth.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/business.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/config_cmd.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/hq.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/job.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/mcp_cmd.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/named_audit.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/solution.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/config/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/config/constants.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/config/manager.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/context.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/server.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/_helpers.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/audit.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/auth.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/business.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/job.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/recommend.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/solution.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/formatter.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/progress.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/tables.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/utils/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/utils/errors.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/utils/interactive.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/__init__.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/conftest.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_api_client.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_auth.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_config.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_live_pipeline.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_output.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_pipeline.py +0 -0
- {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_version.py +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Changelog Guard
|
|
2
|
+
|
|
3
|
+
# Path-filtered: this workflow only spins up a runner when the PR touches
|
|
4
|
+
# pyproject.toml or the changelog itself. Doc-only or unrelated PRs don't
|
|
5
|
+
# trigger it at all, so contributors don't see an extra check on changes
|
|
6
|
+
# that have nothing to do with versioning.
|
|
7
|
+
on:
|
|
8
|
+
pull_request:
|
|
9
|
+
branches: [main]
|
|
10
|
+
paths:
|
|
11
|
+
- "pyproject.toml"
|
|
12
|
+
- "packages/*/pyproject.toml"
|
|
13
|
+
- "packages/mcp/src/cited_mcp/tool_changelog.yaml"
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
guard:
|
|
17
|
+
# Fails any PR that bumps a `version = "..."` line in any pyproject.toml
|
|
18
|
+
# without also editing packages/mcp/src/cited_mcp/tool_changelog.yaml.
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
- name: Check changelog vs version bump
|
|
25
|
+
run: |
|
|
26
|
+
base="origin/${{ github.base_ref }}"
|
|
27
|
+
if git diff "$base"...HEAD -- '**/pyproject.toml' | grep -qE '^[+-]version = '; then
|
|
28
|
+
if ! git diff --name-only "$base"...HEAD | grep -q '^packages/mcp/src/cited_mcp/tool_changelog\.yaml$'; then
|
|
29
|
+
echo "::error::PR bumps pyproject.toml version but does not modify packages/mcp/src/cited_mcp/tool_changelog.yaml. Add a top entry with the new version, fingerprint, and tools_added/changed/removed."
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
fi
|
|
@@ -14,10 +14,10 @@ jobs:
|
|
|
14
14
|
python-version: ["3.11", "3.12", "3.13"]
|
|
15
15
|
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@v4
|
|
17
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
18
18
|
|
|
19
19
|
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
-
uses: actions/setup-python@v5
|
|
20
|
+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
21
21
|
with:
|
|
22
22
|
python-version: ${{ matrix.python-version }}
|
|
23
23
|
|
|
@@ -13,10 +13,10 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
environment: Prod
|
|
15
15
|
steps:
|
|
16
|
-
- uses: actions/checkout@v4
|
|
16
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
17
17
|
|
|
18
18
|
- name: Set up Python
|
|
19
|
-
uses: actions/setup-python@v5
|
|
19
|
+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
20
20
|
with:
|
|
21
21
|
python-version: "3.12"
|
|
22
22
|
|
|
@@ -28,28 +28,34 @@ jobs:
|
|
|
28
28
|
run: |
|
|
29
29
|
cd packages/core
|
|
30
30
|
python -m build
|
|
31
|
-
twine upload dist/*
|
|
31
|
+
twine upload dist/*
|
|
32
32
|
env:
|
|
33
33
|
TWINE_NON_INTERACTIVE: "1"
|
|
34
|
+
TWINE_USERNAME: __token__
|
|
35
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
34
36
|
|
|
35
37
|
- name: Build and publish cited-mcp
|
|
36
38
|
run: |
|
|
37
39
|
cd packages/mcp
|
|
38
40
|
python -m build
|
|
39
|
-
twine upload dist/*
|
|
41
|
+
twine upload dist/*
|
|
40
42
|
env:
|
|
41
43
|
TWINE_NON_INTERACTIVE: "1"
|
|
44
|
+
TWINE_USERNAME: __token__
|
|
45
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
42
46
|
|
|
43
47
|
- name: Build cited-cli
|
|
44
48
|
run: python -m build
|
|
45
49
|
|
|
46
50
|
- name: Publish cited-cli to PyPI
|
|
47
|
-
run: twine upload dist/*
|
|
51
|
+
run: twine upload dist/*
|
|
48
52
|
env:
|
|
49
53
|
TWINE_NON_INTERACTIVE: "1"
|
|
54
|
+
TWINE_USERNAME: __token__
|
|
55
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
50
56
|
|
|
51
57
|
- name: Create GitHub Release
|
|
52
|
-
uses: softprops/action-gh-release@v2
|
|
58
|
+
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
|
|
53
59
|
with:
|
|
54
60
|
files: dist/*
|
|
55
61
|
generate_release_notes: true
|
|
@@ -7,7 +7,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
7
7
|
Monorepo for the [Cited](https://youcited.com) GEO platform tooling. Contains three Python packages:
|
|
8
8
|
|
|
9
9
|
- **`cited-core`** (`packages/core/`) — Shared library: API client, auth, config, endpoints, errors. No CLI or MCP dependencies.
|
|
10
|
-
- **`cited-mcp`** (`packages/mcp/`) — Standalone MCP server with
|
|
10
|
+
- **`cited-mcp`** (`packages/mcp/`) — Standalone MCP server with 47 tools. Depends on `cited-core` + `mcp` SDK. Installable via `pip install cited-mcp` or `uvx cited-mcp`.
|
|
11
11
|
- **`cited-cli`** (root `src/cited_cli/`) — Typer + Rich CLI. Depends on `cited-core` + `typer` + `rich`. Optional dep on `cited-mcp` for `cited mcp serve`.
|
|
12
12
|
|
|
13
13
|
Also contains `cited-plugins/` — a Claude Code plugin (skills, commands, agents) that references the MCP server via `uvx cited-mcp`.
|
|
@@ -37,8 +37,8 @@ cited --help
|
|
|
37
37
|
cited-mcp # Standalone binary (from cited-mcp package)
|
|
38
38
|
cited mcp serve # Via CLI (requires cited-cli[mcp])
|
|
39
39
|
|
|
40
|
-
# Release
|
|
41
|
-
|
|
40
|
+
# Release and deploy scripts are in the private infra repo:
|
|
41
|
+
# ~/repos/cited-mcp-infra (github.com/YouCited/cited-mcp-infra)
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
## Architecture
|
|
@@ -54,11 +54,14 @@ cited mcp serve # Via CLI (requires cited-cli[mcp])
|
|
|
54
54
|
- `config/constants.py` — `ENVIRONMENTS`, `CONFIG_DIR`, `VALID_INDUSTRIES`, etc.
|
|
55
55
|
- `errors.py` — `CitedAPIError`, `ExitCode`, `exit_code_for_status()`
|
|
56
56
|
|
|
57
|
-
**`cited-mcp`** (`packages/mcp/src/cited_mcp/`) — MCP server +
|
|
57
|
+
**`cited-mcp`** (`packages/mcp/src/cited_mcp/`) — MCP server + 47 tools:
|
|
58
58
|
- `server.py` — `FastMCP` instance, lifespan, `run_server()`
|
|
59
59
|
- `tools/` — auth, business, audit, recommend, solution, job tool modules
|
|
60
|
+
- `plan_gating.py` — Per-plan tool access control (growth/scale/pro tiers)
|
|
61
|
+
- `auth_provider.py` — OAuth provider with stateless JWT tokens and user JWT expiry detection
|
|
60
62
|
- Supports `CITED_TOKEN` and `CITED_AGENT_API_KEY` env vars
|
|
61
63
|
- Includes browser OAuth `login` tool for Claude Desktop users
|
|
64
|
+
- Remote server (`remote.py`) runs stateless HTTP with Fargate Spot auto-scaling
|
|
62
65
|
|
|
63
66
|
**`cited-cli`** (`src/cited_cli/`) — Typer CLI:
|
|
64
67
|
- Imports core modules from `cited_core.*` (not `cited_cli.api.*`)
|
|
@@ -113,6 +116,17 @@ This gives `cited audit template list|get|create|update|delete` while `cited aud
|
|
|
113
116
|
|
|
114
117
|
**Audit template workflow:** The typical flow is create → review → refine → run audit. Auto-generated questions are rarely perfect, so `audit template update` is a common operation. The `--question` flags on `update` **replace all** existing questions (matching the web editor's save behavior). Omit `--question` to keep existing questions unchanged while updating name/description. Backend endpoint: `PUT /named-audits/{id}` with `NamedAuditUpdate` schema.
|
|
115
118
|
|
|
119
|
+
## CLI / MCP Feature Parity
|
|
120
|
+
|
|
121
|
+
**Every new feature must be added to BOTH the CLI and MCP server.** A test (`tests/test_feature_parity.py`) enforces this — it compares all CLI commands against MCP tools and fails if a command exists in one but not the other.
|
|
122
|
+
|
|
123
|
+
When adding a new feature:
|
|
124
|
+
1. Add the CLI command in `src/cited_cli/commands/`
|
|
125
|
+
2. Add the MCP tool in `packages/mcp/src/cited_mcp/tools/`
|
|
126
|
+
3. Add the tool to `plan_gating.py` (in the appropriate tier set)
|
|
127
|
+
4. Update the `_CLI_TO_MCP` mapping in `tests/test_feature_parity.py`
|
|
128
|
+
5. If the feature is intentionally one-interface-only, add it to `CLI_ONLY` or `MCP_ONLY` with a comment explaining why
|
|
129
|
+
|
|
116
130
|
## Key Conventions
|
|
117
131
|
|
|
118
132
|
- **Exit codes:** 0=success, 1=error, 2=auth, 3=not found, 4=validation, 5=rate limited (defined in `utils/errors.py`)
|
|
@@ -125,9 +139,14 @@ This gives `cited audit template list|get|create|update|delete` while `cited aud
|
|
|
125
139
|
- **User config** lives at `~/.cited/config.toml`; version is in `src/cited_cli/__init__.py`
|
|
126
140
|
- **Version** single source of truth is `packages/core/src/cited_core/__init__.py`. The CLI and MCP packages import it via `from cited_core import __version__`. The `version =` field in all three `pyproject.toml` files must also be bumped (the release script handles this).
|
|
127
141
|
|
|
128
|
-
## Releasing
|
|
142
|
+
## Releasing & Deployment
|
|
143
|
+
|
|
144
|
+
Release, deploy, and infrastructure scripts live in the **private** repo `~/repos/cited-mcp-infra` ([YouCited/cited-mcp-infra](https://github.com/YouCited/cited-mcp-infra)):
|
|
129
145
|
|
|
130
|
-
`scripts/release.sh <version>`
|
|
146
|
+
- `scripts/release.sh <version>` — Bumps version, publishes to PyPI, updates Homebrew tap
|
|
147
|
+
- `scripts/deploy-mcp.sh <env>` — Deploys MCP server to AWS ECS Fargate
|
|
148
|
+
- `scripts/cleanup_dev.py` — Removes test data from dev environment
|
|
149
|
+
- `docker/Dockerfile` — Docker image for the remote MCP server
|
|
131
150
|
|
|
132
151
|
**Prerequisites:** clean git state on `main`, `gh` CLI authenticated, `.venv` with cited-cli installed, `~/repos/homebrew-cited` cloned.
|
|
133
152
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Future Enhancements
|
|
2
|
+
|
|
3
|
+
## Shell Completions: `cited completions`
|
|
4
|
+
|
|
5
|
+
Generate shell completion scripts for bash, zsh, and fish. Typer has built-in support for this but it needs to be exposed as a command.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Generate and install completions
|
|
9
|
+
cited completions zsh > ~/.zfunc/_cited
|
|
10
|
+
cited completions bash > /etc/bash_completion.d/cited
|
|
11
|
+
cited completions fish > ~/.config/fish/completions/cited.fish
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Typer provides this via `typer.main.get_command(app).get_help()` and Click's shell completion utilities.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Batch Operations
|
|
19
|
+
|
|
20
|
+
### `cited audit batch`
|
|
21
|
+
|
|
22
|
+
Run multiple audit templates in sequence or parallel, collecting results into a single report.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Run all templates for a business
|
|
26
|
+
cited audit batch --business $BID --all
|
|
27
|
+
|
|
28
|
+
# Run specific templates
|
|
29
|
+
cited audit batch --business $BID --template $T1 --template $T2
|
|
30
|
+
|
|
31
|
+
# Export combined results
|
|
32
|
+
cited audit batch --business $BID --all --export results.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### `cited business import`
|
|
36
|
+
|
|
37
|
+
Bulk-create businesses from a CSV or JSON file for agencies managing multiple clients.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cited business import clients.csv
|
|
41
|
+
cited business import --format json clients.json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Diff and History
|
|
47
|
+
|
|
48
|
+
### `cited audit diff`
|
|
49
|
+
|
|
50
|
+
Compare two audit runs side-by-side to show citation changes over time.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cited audit diff $JOB_ID_1 $JOB_ID_2
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Output would show per-question citation deltas (gained/lost citations, score changes) in a Rich table.
|
|
57
|
+
|
|
58
|
+
### `cited analytics export`
|
|
59
|
+
|
|
60
|
+
Export historical analytics data to CSV/JSON for external analysis or dashboarding.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
cited analytics export --business $BID --from 2026-01-01 --to 2026-03-20 --format csv > trends.csv
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Interactive Mode: `cited interactive`
|
|
69
|
+
|
|
70
|
+
A REPL-style session that keeps auth and business context loaded, reducing repetitive flags:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
$ cited interactive --business $BID --env dev
|
|
74
|
+
cited> audit template list
|
|
75
|
+
cited> audit start $TEMPLATE_ID
|
|
76
|
+
cited> job watch $JOB_ID
|
|
77
|
+
cited> recommend start $JOB_ID
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Would use `prompt_toolkit` for readline-style history, tab completion, and inline help.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Webhooks: `cited webhook`
|
|
85
|
+
|
|
86
|
+
Register webhook URLs to get notified when jobs complete, instead of polling with `job watch`.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
cited webhook create --event job.completed --url https://example.com/hook
|
|
90
|
+
cited webhook list
|
|
91
|
+
cited webhook delete $WEBHOOK_ID
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Requires backend support for webhook delivery.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## MCP Server Card (SEP-2127)
|
|
99
|
+
|
|
100
|
+
Publish a server card at `/.well-known/mcp/server-card.json` to support automatic MCP server discovery. This would advertise the server's capabilities, authentication requirements, and tool catalog to MCP clients.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## MCP Code Mode
|
|
105
|
+
|
|
106
|
+
Inspired by [Cloudflare's Code Mode pattern](https://blog.cloudflare.com/enterprise-mcp/), reduce token consumption by exposing just two tools (`search` and `execute`) instead of all 30 tool definitions. The model discovers available tools via search and executes them by name. Could reduce initial token overhead by ~90% for clients that support it.
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cited-cli
|
|
3
|
+
Version: 0.3.14
|
|
4
|
+
Summary: CLI for the Cited GEO platform
|
|
5
|
+
Author-email: Cited <support@youcited.com>
|
|
6
|
+
License-Expression: LicenseRef-Proprietary
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: >=3.11
|
|
9
|
+
Requires-Dist: cited-core>=0.3.14
|
|
10
|
+
Requires-Dist: rich>=13.0.0
|
|
11
|
+
Requires-Dist: typer>=0.15.0
|
|
12
|
+
Provides-Extra: dev
|
|
13
|
+
Requires-Dist: cited-mcp>=0.3.14; extra == 'dev'
|
|
14
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
15
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
16
|
+
Requires-Dist: respx>=0.21; extra == 'dev'
|
|
17
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
18
|
+
Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
|
|
19
|
+
Provides-Extra: mcp
|
|
20
|
+
Requires-Dist: cited-mcp>=0.3.14; extra == 'mcp'
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
1
23
|
# Cited CLI
|
|
2
24
|
|
|
3
25
|
Command-line interface for the [Cited](https://youcited.com) GEO (Generative Engine Optimization) platform. Audit how often your business is cited by AI assistants, generate recommendations, and produce AI-ready content solutions — all from the terminal or a Python script.
|
|
@@ -73,11 +95,24 @@ cited register --email you@example.com --name "Your Name" --password "Secret123!
|
|
|
73
95
|
|
|
74
96
|
## MCP Server
|
|
75
97
|
|
|
76
|
-
This repo also includes `cited-mcp`, a [Model Context Protocol](https://modelcontextprotocol.io/) server that exposes
|
|
98
|
+
This repo also includes `cited-mcp`, a [Model Context Protocol](https://modelcontextprotocol.io/) server that exposes 56 tools for AI assistants like Claude. It lets Claude manage businesses, run GEO audits, generate recommendations, work a prioritized action plan, verify fixes via the Validation Engine, and create solutions on your behalf.
|
|
99
|
+
|
|
100
|
+
### Claude Desktop (Custom Connector — recommended)
|
|
101
|
+
|
|
102
|
+
No local install required. Claude connects to Cited's hosted MCP server directly:
|
|
103
|
+
|
|
104
|
+
1. Open Claude Desktop → **Settings** → **Customize > Connectors**
|
|
105
|
+
2. Click **"+"** → **"Add custom connector"**
|
|
106
|
+
3. Enter URL: `https://mcp.youcited.com/mcp`
|
|
107
|
+
4. Click **Add**
|
|
108
|
+
|
|
109
|
+
Your browser will open for authentication on first use. See [Anthropic's connector guide](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) for details.
|
|
77
110
|
|
|
78
|
-
|
|
111
|
+
> **Requires:** Claude Pro, Max, Team, or Enterprise plan.
|
|
79
112
|
|
|
80
|
-
|
|
113
|
+
### Claude Desktop (Developer Config — alternative)
|
|
114
|
+
|
|
115
|
+
If Custom Connectors aren't available, use the developer config with `mcp-remote`:
|
|
81
116
|
|
|
82
117
|
```json
|
|
83
118
|
{
|
|
@@ -90,7 +125,7 @@ No local install required. Add this to your Claude Desktop config (`Settings →
|
|
|
90
125
|
}
|
|
91
126
|
```
|
|
92
127
|
|
|
93
|
-
|
|
128
|
+
Add to `Settings → Developer → Edit Config`, then restart Claude Desktop.
|
|
94
129
|
|
|
95
130
|
> **Prerequisite:** [Node.js](https://nodejs.org) (LTS) must be installed for `npx`.
|
|
96
131
|
|
|
@@ -131,6 +166,10 @@ Verify Node.js is installed (`node --version`), or install with `brew install no
|
|
|
131
166
|
|
|
132
167
|
Open Settings (`Cmd+,`) → search "MCP" → verify the server shows a green status. Use tools in Composer (Agent mode).
|
|
133
168
|
|
|
169
|
+
### Updating to new Cited features
|
|
170
|
+
|
|
171
|
+
Cited adds new tools regularly. To access new tools after a release, **disconnect and reconnect the Cited connector** in your Claude Desktop or Claude.ai connector settings — restarting Claude alone is not enough, because the connector's tool list is cached at registration time. Once reconnected, ask the agent to call `whats_new` to see what changed since you last connected.
|
|
172
|
+
|
|
134
173
|
### Example
|
|
135
174
|
|
|
136
175
|
Once connected, ask Claude something like:
|
|
@@ -143,13 +182,17 @@ Claude will chain the tools automatically — `list_businesses` → `start_audit
|
|
|
143
182
|
|
|
144
183
|
| Category | Tools |
|
|
145
184
|
|----------|-------|
|
|
146
|
-
| **Auth** | `check_auth_status`, `login` |
|
|
147
|
-
| **Businesses** | `list_businesses`, `get_business`, `create_business`, `update_business`, `delete_business`, `crawl_business`, `get_health_scores` |
|
|
185
|
+
| **Auth** | `check_auth_status`, `login`, `logout` |
|
|
186
|
+
| **Businesses** | `list_businesses`, `get_business`, `create_business`, `update_business`, `delete_business`, `crawl_business`, `get_health_scores`, `get_usage_stats` |
|
|
148
187
|
| **Audit Templates** | `list_audit_templates`, `get_audit_template`, `create_audit_template`, `update_audit_template`, `delete_audit_template` |
|
|
149
|
-
| **Audits** | `start_audit`, `get_audit_status`, `get_audit_result`, `list_audits` |
|
|
188
|
+
| **Audits** | `start_audit`, `get_audit_status`, `get_audit_result`, `list_audits`, `export_audit` |
|
|
150
189
|
| **Recommendations** | `start_recommendation`, `get_recommendation_status`, `get_recommendation_result`, `get_recommendation_insights`, `list_recommendations` |
|
|
151
190
|
| **Solutions** | `start_solution`, `get_solution_status`, `get_solution_result`, `list_solutions` |
|
|
152
|
-
| **Jobs** | `get_job_status` |
|
|
191
|
+
| **Jobs** | `get_job_status`, `cancel_job` |
|
|
192
|
+
| **HQ** | `get_business_hq` |
|
|
193
|
+
| **Analytics** | `get_analytics_trends`, `get_analytics_summary`, `compare_audits` |
|
|
194
|
+
| **Agent API** | `get_business_facts`, `get_business_claims`, `get_competitive_comparison`, `get_semantic_health`, `buyer_fit_query` |
|
|
195
|
+
| **Action Plan** | `get_action_plan`, `get_quick_wins`, `mark_action_done`, `dismiss_action`, `get_action_progress` |
|
|
153
196
|
|
|
154
197
|
See [`packages/mcp/README.md`](packages/mcp/README.md) for full details, environment variables, and development instructions.
|
|
155
198
|
|
|
@@ -557,22 +600,17 @@ ruff check src/
|
|
|
557
600
|
mypy src/cited_cli/ --ignore-missing-imports
|
|
558
601
|
```
|
|
559
602
|
|
|
560
|
-
|
|
603
|
+
### MCP test harness
|
|
561
604
|
|
|
562
|
-
|
|
605
|
+
`scripts/mcp_test_harness.py` runs an end-to-end test suite against the deployed MCP server (dev or prod). Exercises the four-PR-plan test cases — `tools_fingerprint` on `ping`, `whats_new` lookups, `upgrade_plan` no-op response, `tool_unavailable` error shape — plus auth/host-header/rate-limit/cross-env/`robots.txt` regression checks.
|
|
563
606
|
|
|
564
607
|
```bash
|
|
565
|
-
./scripts/
|
|
608
|
+
./scripts/mcp_test_harness.py --env dev # mcpdev.youcited.com
|
|
609
|
+
./scripts/mcp_test_harness.py --env prod # mcp.youcited.com
|
|
566
610
|
```
|
|
567
611
|
|
|
568
|
-
|
|
569
|
-
1. Bump the version in `pyproject.toml` and `src/cited_cli/__init__.py`
|
|
570
|
-
2. Commit, tag `v0.2.0`, and push to origin (triggers GitHub Actions release)
|
|
571
|
-
3. Wait for the GitHub release to be created
|
|
572
|
-
4. Download the tarball, compute SHA256, and resolve all Python dependency hashes from PyPI
|
|
573
|
-
5. Regenerate `Formula/cited.rb` in `~/repos/homebrew-cited` with the updated formula
|
|
574
|
-
6. Commit and push the tap update
|
|
612
|
+
First run per env opens a browser for OAuth; tokens are cached at `/tmp/cited-mcp-{env}-token.json` and reused for 7 days. The rate-limiter test fills the user's per-token window for ~60s, so run it last in any debug session.
|
|
575
613
|
|
|
576
|
-
|
|
614
|
+
## Releasing
|
|
577
615
|
|
|
578
|
-
|
|
616
|
+
Release and deployment scripts are in a [private infrastructure repo](https://github.com/YouCited/cited-mcp-infra). See that repo's README for release and deploy instructions.
|
|
@@ -1,24 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: cited-cli
|
|
3
|
-
Version: 0.3.4
|
|
4
|
-
Summary: CLI for the Cited GEO platform
|
|
5
|
-
Author-email: Cited <support@youcited.com>
|
|
6
|
-
License-Expression: LicenseRef-Proprietary
|
|
7
|
-
License-File: LICENSE
|
|
8
|
-
Requires-Python: >=3.11
|
|
9
|
-
Requires-Dist: cited-core>=0.3.4
|
|
10
|
-
Requires-Dist: rich>=13.0.0
|
|
11
|
-
Requires-Dist: typer>=0.15.0
|
|
12
|
-
Provides-Extra: dev
|
|
13
|
-
Requires-Dist: cited-mcp>=0.3.4; extra == 'dev'
|
|
14
|
-
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
15
|
-
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
16
|
-
Requires-Dist: respx>=0.21; extra == 'dev'
|
|
17
|
-
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
18
|
-
Provides-Extra: mcp
|
|
19
|
-
Requires-Dist: cited-mcp>=0.3.4; extra == 'mcp'
|
|
20
|
-
Description-Content-Type: text/markdown
|
|
21
|
-
|
|
22
1
|
# Cited CLI
|
|
23
2
|
|
|
24
3
|
Command-line interface for the [Cited](https://youcited.com) GEO (Generative Engine Optimization) platform. Audit how often your business is cited by AI assistants, generate recommendations, and produce AI-ready content solutions — all from the terminal or a Python script.
|
|
@@ -94,11 +73,24 @@ cited register --email you@example.com --name "Your Name" --password "Secret123!
|
|
|
94
73
|
|
|
95
74
|
## MCP Server
|
|
96
75
|
|
|
97
|
-
This repo also includes `cited-mcp`, a [Model Context Protocol](https://modelcontextprotocol.io/) server that exposes
|
|
76
|
+
This repo also includes `cited-mcp`, a [Model Context Protocol](https://modelcontextprotocol.io/) server that exposes 56 tools for AI assistants like Claude. It lets Claude manage businesses, run GEO audits, generate recommendations, work a prioritized action plan, verify fixes via the Validation Engine, and create solutions on your behalf.
|
|
77
|
+
|
|
78
|
+
### Claude Desktop (Custom Connector — recommended)
|
|
79
|
+
|
|
80
|
+
No local install required. Claude connects to Cited's hosted MCP server directly:
|
|
81
|
+
|
|
82
|
+
1. Open Claude Desktop → **Settings** → **Customize > Connectors**
|
|
83
|
+
2. Click **"+"** → **"Add custom connector"**
|
|
84
|
+
3. Enter URL: `https://mcp.youcited.com/mcp`
|
|
85
|
+
4. Click **Add**
|
|
86
|
+
|
|
87
|
+
Your browser will open for authentication on first use. See [Anthropic's connector guide](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) for details.
|
|
98
88
|
|
|
99
|
-
|
|
89
|
+
> **Requires:** Claude Pro, Max, Team, or Enterprise plan.
|
|
100
90
|
|
|
101
|
-
|
|
91
|
+
### Claude Desktop (Developer Config — alternative)
|
|
92
|
+
|
|
93
|
+
If Custom Connectors aren't available, use the developer config with `mcp-remote`:
|
|
102
94
|
|
|
103
95
|
```json
|
|
104
96
|
{
|
|
@@ -111,7 +103,7 @@ No local install required. Add this to your Claude Desktop config (`Settings →
|
|
|
111
103
|
}
|
|
112
104
|
```
|
|
113
105
|
|
|
114
|
-
|
|
106
|
+
Add to `Settings → Developer → Edit Config`, then restart Claude Desktop.
|
|
115
107
|
|
|
116
108
|
> **Prerequisite:** [Node.js](https://nodejs.org) (LTS) must be installed for `npx`.
|
|
117
109
|
|
|
@@ -152,6 +144,10 @@ Verify Node.js is installed (`node --version`), or install with `brew install no
|
|
|
152
144
|
|
|
153
145
|
Open Settings (`Cmd+,`) → search "MCP" → verify the server shows a green status. Use tools in Composer (Agent mode).
|
|
154
146
|
|
|
147
|
+
### Updating to new Cited features
|
|
148
|
+
|
|
149
|
+
Cited adds new tools regularly. To access new tools after a release, **disconnect and reconnect the Cited connector** in your Claude Desktop or Claude.ai connector settings — restarting Claude alone is not enough, because the connector's tool list is cached at registration time. Once reconnected, ask the agent to call `whats_new` to see what changed since you last connected.
|
|
150
|
+
|
|
155
151
|
### Example
|
|
156
152
|
|
|
157
153
|
Once connected, ask Claude something like:
|
|
@@ -164,13 +160,17 @@ Claude will chain the tools automatically — `list_businesses` → `start_audit
|
|
|
164
160
|
|
|
165
161
|
| Category | Tools |
|
|
166
162
|
|----------|-------|
|
|
167
|
-
| **Auth** | `check_auth_status`, `login` |
|
|
168
|
-
| **Businesses** | `list_businesses`, `get_business`, `create_business`, `update_business`, `delete_business`, `crawl_business`, `get_health_scores` |
|
|
163
|
+
| **Auth** | `check_auth_status`, `login`, `logout` |
|
|
164
|
+
| **Businesses** | `list_businesses`, `get_business`, `create_business`, `update_business`, `delete_business`, `crawl_business`, `get_health_scores`, `get_usage_stats` |
|
|
169
165
|
| **Audit Templates** | `list_audit_templates`, `get_audit_template`, `create_audit_template`, `update_audit_template`, `delete_audit_template` |
|
|
170
|
-
| **Audits** | `start_audit`, `get_audit_status`, `get_audit_result`, `list_audits` |
|
|
166
|
+
| **Audits** | `start_audit`, `get_audit_status`, `get_audit_result`, `list_audits`, `export_audit` |
|
|
171
167
|
| **Recommendations** | `start_recommendation`, `get_recommendation_status`, `get_recommendation_result`, `get_recommendation_insights`, `list_recommendations` |
|
|
172
168
|
| **Solutions** | `start_solution`, `get_solution_status`, `get_solution_result`, `list_solutions` |
|
|
173
|
-
| **Jobs** | `get_job_status` |
|
|
169
|
+
| **Jobs** | `get_job_status`, `cancel_job` |
|
|
170
|
+
| **HQ** | `get_business_hq` |
|
|
171
|
+
| **Analytics** | `get_analytics_trends`, `get_analytics_summary`, `compare_audits` |
|
|
172
|
+
| **Agent API** | `get_business_facts`, `get_business_claims`, `get_competitive_comparison`, `get_semantic_health`, `buyer_fit_query` |
|
|
173
|
+
| **Action Plan** | `get_action_plan`, `get_quick_wins`, `mark_action_done`, `dismiss_action`, `get_action_progress` |
|
|
174
174
|
|
|
175
175
|
See [`packages/mcp/README.md`](packages/mcp/README.md) for full details, environment variables, and development instructions.
|
|
176
176
|
|
|
@@ -578,22 +578,17 @@ ruff check src/
|
|
|
578
578
|
mypy src/cited_cli/ --ignore-missing-imports
|
|
579
579
|
```
|
|
580
580
|
|
|
581
|
-
|
|
581
|
+
### MCP test harness
|
|
582
582
|
|
|
583
|
-
|
|
583
|
+
`scripts/mcp_test_harness.py` runs an end-to-end test suite against the deployed MCP server (dev or prod). Exercises the four-PR-plan test cases — `tools_fingerprint` on `ping`, `whats_new` lookups, `upgrade_plan` no-op response, `tool_unavailable` error shape — plus auth/host-header/rate-limit/cross-env/`robots.txt` regression checks.
|
|
584
584
|
|
|
585
585
|
```bash
|
|
586
|
-
./scripts/
|
|
586
|
+
./scripts/mcp_test_harness.py --env dev # mcpdev.youcited.com
|
|
587
|
+
./scripts/mcp_test_harness.py --env prod # mcp.youcited.com
|
|
587
588
|
```
|
|
588
589
|
|
|
589
|
-
|
|
590
|
-
1. Bump the version in `pyproject.toml` and `src/cited_cli/__init__.py`
|
|
591
|
-
2. Commit, tag `v0.2.0`, and push to origin (triggers GitHub Actions release)
|
|
592
|
-
3. Wait for the GitHub release to be created
|
|
593
|
-
4. Download the tarball, compute SHA256, and resolve all Python dependency hashes from PyPI
|
|
594
|
-
5. Regenerate `Formula/cited.rb` in `~/repos/homebrew-cited` with the updated formula
|
|
595
|
-
6. Commit and push the tap update
|
|
590
|
+
First run per env opens a browser for OAuth; tokens are cached at `/tmp/cited-mcp-{env}-token.json` and reused for 7 days. The rate-limiter test fills the user's per-token window for ~60s, so run it last in any debug session.
|
|
596
591
|
|
|
597
|
-
|
|
592
|
+
## Releasing
|
|
598
593
|
|
|
599
|
-
|
|
594
|
+
Release and deployment scripts are in a [private infrastructure repo](https://github.com/YouCited/cited-mcp-infra). See that repo's README for release and deploy instructions.
|
|
@@ -460,20 +460,14 @@ cited auth status # Should fail with exit code 2
|
|
|
460
460
|
|
|
461
461
|
### Automated cleanup script
|
|
462
462
|
|
|
463
|
-
If you forget to clean up (or a run fails partway through), use the cleanup script
|
|
463
|
+
If you forget to clean up (or a run fails partway through), use the cleanup script from the [private infra repo](https://github.com/YouCited/cited-mcp-infra):
|
|
464
464
|
|
|
465
465
|
```bash
|
|
466
466
|
# Dry run — see what would be deleted
|
|
467
|
-
python3 scripts/cleanup_dev.py --dry-run
|
|
468
|
-
|
|
469
|
-
# Interactive — prompts you to pick which businesses to delete
|
|
470
|
-
python3 scripts/cleanup_dev.py
|
|
467
|
+
python3 ~/repos/cited-mcp-infra/scripts/cleanup_dev.py --dry-run
|
|
471
468
|
|
|
472
469
|
# Auto — deletes all businesses matching test name patterns (no prompts)
|
|
473
|
-
python3 scripts/cleanup_dev.py --auto
|
|
474
|
-
|
|
475
|
-
# Target a different environment
|
|
476
|
-
python3 scripts/cleanup_dev.py --env prod --dry-run
|
|
470
|
+
python3 ~/repos/cited-mcp-infra/scripts/cleanup_dev.py --auto
|
|
477
471
|
```
|
|
478
472
|
|
|
479
473
|
The script detects test businesses by name patterns ("E2E Test", "CLI Test", etc.), deletes associated audit templates first, then the business itself.
|
|
@@ -6,9 +6,27 @@ This guide walks you through connecting Claude Desktop to the Cited GEO platform
|
|
|
6
6
|
|
|
7
7
|
- **Claude Desktop** app installed
|
|
8
8
|
- **A Cited account** at [youcited.com](https://youcited.com)
|
|
9
|
-
- **Node.js** installed (download from [nodejs.org](https://nodejs.org))
|
|
10
9
|
|
|
11
|
-
##
|
|
10
|
+
## Option A: Custom Connector (recommended)
|
|
11
|
+
|
|
12
|
+
The simplest setup — no local software required. Claude connects to Cited's hosted MCP server directly.
|
|
13
|
+
|
|
14
|
+
1. Open Claude Desktop
|
|
15
|
+
2. Go to **Settings** (gear icon or Claude menu)
|
|
16
|
+
3. Navigate to **Customize > Connectors**
|
|
17
|
+
4. Click **"+"** then **"Add custom connector"**
|
|
18
|
+
5. Enter the server URL: `https://mcp.youcited.com/mcp`
|
|
19
|
+
6. Click **Add**
|
|
20
|
+
|
|
21
|
+
Your browser will open to authenticate with your Cited account. After logging in, you'll be redirected back automatically.
|
|
22
|
+
|
|
23
|
+
> **Note:** Custom Connectors require Claude Pro, Max, Team, or Enterprise. See [Anthropic's guide](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) for details.
|
|
24
|
+
|
|
25
|
+
## Option B: Developer Config (mcp-remote)
|
|
26
|
+
|
|
27
|
+
If Custom Connectors aren't available on your plan, or you prefer the developer config approach:
|
|
28
|
+
|
|
29
|
+
**Prerequisite:** [Node.js](https://nodejs.org) (LTS) must be installed.
|
|
12
30
|
|
|
13
31
|
1. Open Claude Desktop
|
|
14
32
|
2. Click the **Claude** menu (top-left on Mac, top bar on Windows)
|
|
@@ -23,19 +41,15 @@ This opens `claude_desktop_config.json`. Add the `mcpServers` section:
|
|
|
23
41
|
"mcpServers": {
|
|
24
42
|
"cited": {
|
|
25
43
|
"command": "npx",
|
|
26
|
-
"args": ["mcp-remote", "https://mcp.youcited.com"]
|
|
44
|
+
"args": ["mcp-remote", "https://mcp.youcited.com/mcp"]
|
|
27
45
|
}
|
|
28
46
|
}
|
|
29
47
|
}
|
|
30
48
|
```
|
|
31
49
|
|
|
32
|
-
Save the file and close
|
|
33
|
-
|
|
34
|
-
## Step 2: Restart Claude Desktop
|
|
50
|
+
Save the file, then quit and reopen Claude Desktop (Cmd+Q on Mac, or close fully on Windows).
|
|
35
51
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## Step 3: Try It Out
|
|
52
|
+
## Try It Out
|
|
39
53
|
|
|
40
54
|
Start a new conversation in Claude Desktop and try any of these:
|
|
41
55
|
|
|
@@ -43,16 +57,20 @@ Start a new conversation in Claude Desktop and try any of these:
|
|
|
43
57
|
- **"Run a GEO audit on [business name]"** — audits your AI search presence
|
|
44
58
|
- **"Check my Cited account status"** — verifies you're connected
|
|
45
59
|
|
|
46
|
-
On first use, your browser will open to log in to your Cited account. After logging in, you'll be redirected back automatically. This only happens once.
|
|
60
|
+
On first use, your browser will open to log in to your Cited account. After logging in, you'll be redirected back automatically. This only happens once per session.
|
|
47
61
|
|
|
48
62
|
## Troubleshooting
|
|
49
63
|
|
|
50
|
-
**
|
|
64
|
+
**"Not authenticated" or 401 errors:**
|
|
65
|
+
- Disconnect and reconnect the Cited connector — this triggers a fresh login
|
|
66
|
+
- Or restart Claude Desktop fully (not just close the window)
|
|
67
|
+
|
|
68
|
+
**Browser login popup doesn't appear (Option B):**
|
|
51
69
|
- Make sure Node.js is installed: open a terminal and type `node --version`
|
|
52
70
|
- Make sure you saved the config file correctly
|
|
53
|
-
- Restart Claude Desktop fully
|
|
71
|
+
- Restart Claude Desktop fully
|
|
54
72
|
|
|
55
|
-
**"npx not found" error:**
|
|
73
|
+
**"npx not found" error (Option B):**
|
|
56
74
|
- Install Node.js from [nodejs.org](https://nodejs.org) (LTS version recommended)
|
|
57
75
|
- Restart Claude Desktop after installing Node.js
|
|
58
76
|
|
|
@@ -65,5 +83,6 @@ Once connected, Claude can:
|
|
|
65
83
|
- **Generate recommendations** — get actionable insights to improve your AI search visibility
|
|
66
84
|
- **Create solutions** — detailed implementation steps for each recommendation
|
|
67
85
|
- **Check health scores** — see your overall GEO health at a glance
|
|
86
|
+
- **Monitor usage** — check plan limits and account statistics
|
|
68
87
|
|
|
69
88
|
Just ask Claude in plain English — no commands to memorize.
|