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.
Files changed (139) hide show
  1. cited_cli-0.3.14/.github/workflows/changelog-guard.yml +32 -0
  2. {cited_cli-0.3.4 → cited_cli-0.3.14}/.github/workflows/ci.yml +2 -2
  3. {cited_cli-0.3.4 → cited_cli-0.3.14}/.github/workflows/release.yml +12 -6
  4. {cited_cli-0.3.4 → cited_cli-0.3.14}/.gitignore +1 -0
  5. {cited_cli-0.3.4 → cited_cli-0.3.14}/CLAUDE.md +25 -6
  6. cited_cli-0.3.14/FUTURE.md +106 -0
  7. cited_cli-0.3.4/README.md → cited_cli-0.3.14/PKG-INFO +58 -20
  8. cited_cli-0.3.4/PKG-INFO → cited_cli-0.3.14/README.md +36 -41
  9. {cited_cli-0.3.4 → cited_cli-0.3.14}/TEST_RUNBOOK.md +3 -9
  10. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/CLAUDE_DESKTOP_SETUP.md +32 -13
  11. cited_cli-0.3.14/cited-plugins/commands/status.md +23 -0
  12. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/skills/business-setup/SKILL.md +1 -1
  13. cited_cli-0.3.14/cited-plugins/skills/explore/SKILL.md +173 -0
  14. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/skills/geo-recommend/SKILL.md +9 -7
  15. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/pyproject.toml +1 -1
  16. cited_cli-0.3.14/packages/core/src/cited_core/__init__.py +1 -0
  17. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/api/endpoints.py +14 -2
  18. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/auth/store.py +9 -4
  19. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/config/manager.py +4 -0
  20. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/README.md +84 -6
  21. cited_cli-0.3.14/packages/mcp/SKILL.md +66 -0
  22. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/pyproject.toml +5 -3
  23. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/auth_provider.py +119 -28
  24. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/context.py +1 -0
  25. cited_cli-0.3.14/packages/mcp/src/cited_mcp/plan_gating.py +201 -0
  26. cited_cli-0.3.14/packages/mcp/src/cited_mcp/remote.py +424 -0
  27. cited_cli-0.3.14/packages/mcp/src/cited_mcp/server.py +147 -0
  28. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tool_changelog.yaml +328 -0
  29. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tool_manager.py +101 -0
  30. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/_helpers.py +470 -0
  31. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/action_plan.py +366 -0
  32. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/agent.py +258 -0
  33. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/analytics.py +162 -0
  34. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/tools/audit.py +144 -16
  35. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/auth.py +305 -0
  36. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/billing.py +210 -0
  37. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/tools/business.py +101 -12
  38. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/changelog.py +218 -0
  39. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/hq.py +93 -0
  40. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/job.py +122 -0
  41. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/recommend.py +454 -0
  42. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/solution.py +190 -0
  43. cited_cli-0.3.14/packages/mcp/tests/conftest.py +98 -0
  44. cited_cli-0.3.14/packages/mcp/tests/test_auth_provider.py +125 -0
  45. cited_cli-0.3.14/packages/mcp/tests/test_plan_gating.py +146 -0
  46. cited_cli-0.3.14/packages/mcp/tests/test_tools.py +2321 -0
  47. {cited_cli-0.3.4 → cited_cli-0.3.14}/pyproject.toml +5 -4
  48. cited_cli-0.3.14/scripts/mcp_test_harness.py +666 -0
  49. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/api/endpoints.py +2 -0
  50. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/analytics.py +15 -8
  51. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/recommend.py +81 -0
  52. cited_cli-0.3.14/tests/test_feature_parity.py +193 -0
  53. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_mcp_server.py +40 -0
  54. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_mcp_tools.py +31 -6
  55. cited_cli-0.3.4/FUTURE.md +0 -197
  56. cited_cli-0.3.4/cited-plugins/commands/status.md +0 -13
  57. cited_cli-0.3.4/packages/core/src/cited_core/__init__.py +0 -1
  58. cited_cli-0.3.4/packages/mcp/Dockerfile +0 -14
  59. cited_cli-0.3.4/packages/mcp/SKILL.md +0 -54
  60. cited_cli-0.3.4/packages/mcp/src/cited_mcp/remote.py +0 -159
  61. cited_cli-0.3.4/packages/mcp/src/cited_mcp/server.py +0 -77
  62. cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/_helpers.py +0 -106
  63. cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/auth.py +0 -135
  64. cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/job.py +0 -61
  65. cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/recommend.py +0 -133
  66. cited_cli-0.3.4/packages/mcp/src/cited_mcp/tools/solution.py +0 -102
  67. cited_cli-0.3.4/scripts/cleanup_dev.py +0 -246
  68. cited_cli-0.3.4/scripts/deploy-mcp.sh +0 -434
  69. cited_cli-0.3.4/scripts/release.sh +0 -242
  70. {cited_cli-0.3.4 → cited_cli-0.3.14}/DEMO.md +0 -0
  71. {cited_cli-0.3.4 → cited_cli-0.3.14}/LICENSE +0 -0
  72. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/.claude-plugin/marketplace.json +0 -0
  73. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/.claude-plugin/plugin.json +0 -0
  74. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/.mcp.json +0 -0
  75. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/agents/geo-analyst.md +0 -0
  76. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/commands/audit.md +0 -0
  77. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/commands/recommend.md +0 -0
  78. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/settings.json +0 -0
  79. {cited_cli-0.3.4 → cited_cli-0.3.14}/cited-plugins/skills/geo-audit/SKILL.md +0 -0
  80. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/api/__init__.py +0 -0
  81. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/api/client.py +0 -0
  82. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/auth/__init__.py +0 -0
  83. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/auth/oauth_server.py +0 -0
  84. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/config/__init__.py +0 -0
  85. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/config/constants.py +0 -0
  86. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/core/src/cited_core/errors.py +0 -0
  87. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/__init__.py +0 -0
  88. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/__main__.py +0 -0
  89. {cited_cli-0.3.4 → cited_cli-0.3.14}/packages/mcp/src/cited_mcp/tools/__init__.py +0 -0
  90. {cited_cli-0.3.4 → cited_cli-0.3.14}/scripts/dev-install.sh +0 -0
  91. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/__init__.py +0 -0
  92. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/__main__.py +0 -0
  93. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/api/__init__.py +0 -0
  94. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/api/client.py +0 -0
  95. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/app.py +0 -0
  96. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/auth/__init__.py +0 -0
  97. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/auth/oauth_server.py +0 -0
  98. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/auth/store.py +0 -0
  99. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/__init__.py +0 -0
  100. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/agent.py +0 -0
  101. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/audit.py +0 -0
  102. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/auth.py +0 -0
  103. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/business.py +0 -0
  104. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/config_cmd.py +0 -0
  105. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/hq.py +0 -0
  106. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/job.py +0 -0
  107. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/mcp_cmd.py +0 -0
  108. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/named_audit.py +0 -0
  109. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/commands/solution.py +0 -0
  110. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/config/__init__.py +0 -0
  111. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/config/constants.py +0 -0
  112. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/config/manager.py +0 -0
  113. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/__init__.py +0 -0
  114. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/context.py +0 -0
  115. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/server.py +0 -0
  116. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/__init__.py +0 -0
  117. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/_helpers.py +0 -0
  118. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/audit.py +0 -0
  119. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/auth.py +0 -0
  120. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/business.py +0 -0
  121. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/job.py +0 -0
  122. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/recommend.py +0 -0
  123. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/mcp/tools/solution.py +0 -0
  124. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/__init__.py +0 -0
  125. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/formatter.py +0 -0
  126. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/progress.py +0 -0
  127. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/output/tables.py +0 -0
  128. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/utils/__init__.py +0 -0
  129. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/utils/errors.py +0 -0
  130. {cited_cli-0.3.4 → cited_cli-0.3.14}/src/cited_cli/utils/interactive.py +0 -0
  131. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/__init__.py +0 -0
  132. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/conftest.py +0 -0
  133. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_api_client.py +0 -0
  134. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_auth.py +0 -0
  135. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_config.py +0 -0
  136. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_live_pipeline.py +0 -0
  137. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_output.py +0 -0
  138. {cited_cli-0.3.4 → cited_cli-0.3.14}/tests/test_pipeline.py +0 -0
  139. {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/* -u __token__ -p ${{ secrets.PYPI_TOKEN }}
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/* -u __token__ -p ${{ secrets.PYPI_TOKEN }}
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/* -u __token__ -p ${{ secrets.PYPI_TOKEN }}
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
@@ -17,3 +17,4 @@ env/
17
17
  htmlcov/
18
18
  .env
19
19
  ~/.cited/
20
+ .DS_Store
@@ -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 28 tools. Depends on `cited-core` + `mcp` SDK. Installable via `pip install cited-mcp` or `uvx cited-mcp`.
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 (publishes cited-core → cited-mcp → cited-cli to PyPI)
41
- ./scripts/release.sh 0.3.2
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 + 28 tools:
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>` handles the full release pipeline. It bumps the version in both `pyproject.toml` and `__init__.py`, commits, tags `v<version>`, pushes (triggering the GitHub Actions release workflow), waits for the release, then regenerates the Homebrew formula in `~/repos/homebrew-cited` with the new tarball URL, SHA256, and all Python dependency resource blocks (resolved from PyPI). Finally it commits and pushes the tap update.
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 28 tools for AI assistants like Claude. It lets Claude manage businesses, run GEO audits, generate recommendations, and create solutions on your behalf.
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
- ### Claude Desktop (remote — recommended)
111
+ > **Requires:** Claude Pro, Max, Team, or Enterprise plan.
79
112
 
80
- No local install required. Add this to your Claude Desktop config (`Settings → Developer → Edit Config`):
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
- Restart Claude Desktop. A browser window will open for authentication on first use.
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
- ## Releasing
603
+ ### MCP test harness
561
604
 
562
- A single script handles the full release pipeline — version bump, GitHub release, and Homebrew tap update:
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/release.sh 0.2.0
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
- This will:
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
- After the script completes, users can update with `brew update && brew upgrade cited`.
614
+ ## Releasing
577
615
 
578
- **Prerequisites:** `gh` CLI authenticated, `.venv` with cited-cli installed, `~/repos/homebrew-cited` cloned.
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 28 tools for AI assistants like Claude. It lets Claude manage businesses, run GEO audits, generate recommendations, and create solutions on your behalf.
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
- ### Claude Desktop (remote — recommended)
89
+ > **Requires:** Claude Pro, Max, Team, or Enterprise plan.
100
90
 
101
- No local install required. Add this to your Claude Desktop config (`Settings → Developer → Edit Config`):
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
- Restart Claude Desktop. A browser window will open for authentication on first use.
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
- ## Releasing
581
+ ### MCP test harness
582
582
 
583
- A single script handles the full release pipeline — version bump, GitHub release, and Homebrew tap update:
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/release.sh 0.2.0
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
- This will:
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
- After the script completes, users can update with `brew update && brew upgrade cited`.
592
+ ## Releasing
598
593
 
599
- **Prerequisites:** `gh` CLI authenticated, `.venv` with cited-cli installed, `~/repos/homebrew-cited` cloned.
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 to find and remove test assets:
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
- ## Step 1: Configure Claude Desktop
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 the text editor.
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
- Quit Claude Desktop completely (Cmd+Q on Mac, or close fully on Windows), then reopen it.
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
- **Browser login popup doesn't appear:**
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 (not just close the window)
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.