cited-cli 0.3.14__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. {cited_cli-0.3.14 → cited_cli-0.5.0}/PKG-INFO +4 -4
  2. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/pyproject.toml +1 -1
  3. cited_cli-0.5.0/packages/core/src/cited_core/__init__.py +1 -0
  4. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/api/client.py +9 -0
  5. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/api/endpoints.py +8 -0
  6. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/pyproject.toml +2 -2
  7. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/plan_gating.py +17 -0
  8. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tool_changelog.yaml +209 -0
  9. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/_helpers.py +167 -91
  10. cited_cli-0.5.0/packages/mcp/src/cited_mcp/tools/business.py +477 -0
  11. cited_cli-0.5.0/packages/mcp/src/cited_mcp/tools/hq.py +799 -0
  12. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/recommend.py +20 -1
  13. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/tests/test_plan_gating.py +1 -1
  14. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/tests/test_tools.py +132 -2
  15. {cited_cli-0.3.14 → cited_cli-0.5.0}/pyproject.toml +4 -4
  16. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/business.py +104 -0
  17. cited_cli-0.5.0/src/cited_cli/commands/hq.py +578 -0
  18. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_feature_parity.py +20 -0
  19. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_mcp_server.py +18 -0
  20. cited_cli-0.3.14/packages/core/src/cited_core/__init__.py +0 -1
  21. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/business.py +0 -273
  22. cited_cli-0.3.14/packages/mcp/src/cited_mcp/tools/hq.py +0 -93
  23. cited_cli-0.3.14/src/cited_cli/commands/hq.py +0 -125
  24. {cited_cli-0.3.14 → cited_cli-0.5.0}/.github/workflows/changelog-guard.yml +0 -0
  25. {cited_cli-0.3.14 → cited_cli-0.5.0}/.github/workflows/ci.yml +0 -0
  26. {cited_cli-0.3.14 → cited_cli-0.5.0}/.github/workflows/release.yml +0 -0
  27. {cited_cli-0.3.14 → cited_cli-0.5.0}/.gitignore +0 -0
  28. {cited_cli-0.3.14 → cited_cli-0.5.0}/CLAUDE.md +0 -0
  29. {cited_cli-0.3.14 → cited_cli-0.5.0}/DEMO.md +0 -0
  30. {cited_cli-0.3.14 → cited_cli-0.5.0}/FUTURE.md +0 -0
  31. {cited_cli-0.3.14 → cited_cli-0.5.0}/LICENSE +0 -0
  32. {cited_cli-0.3.14 → cited_cli-0.5.0}/README.md +0 -0
  33. {cited_cli-0.3.14 → cited_cli-0.5.0}/TEST_RUNBOOK.md +0 -0
  34. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/.claude-plugin/marketplace.json +0 -0
  35. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/.claude-plugin/plugin.json +0 -0
  36. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/.mcp.json +0 -0
  37. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/CLAUDE_DESKTOP_SETUP.md +0 -0
  38. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/agents/geo-analyst.md +0 -0
  39. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/commands/audit.md +0 -0
  40. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/commands/recommend.md +0 -0
  41. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/commands/status.md +0 -0
  42. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/settings.json +0 -0
  43. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/skills/business-setup/SKILL.md +0 -0
  44. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/skills/explore/SKILL.md +0 -0
  45. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/skills/geo-audit/SKILL.md +0 -0
  46. {cited_cli-0.3.14 → cited_cli-0.5.0}/cited-plugins/skills/geo-recommend/SKILL.md +0 -0
  47. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/api/__init__.py +0 -0
  48. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/auth/__init__.py +0 -0
  49. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/auth/oauth_server.py +0 -0
  50. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/auth/store.py +0 -0
  51. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/config/__init__.py +0 -0
  52. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/config/constants.py +0 -0
  53. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/config/manager.py +0 -0
  54. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/core/src/cited_core/errors.py +0 -0
  55. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/README.md +0 -0
  56. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/SKILL.md +0 -0
  57. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/__init__.py +0 -0
  58. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/__main__.py +0 -0
  59. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/auth_provider.py +0 -0
  60. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/context.py +0 -0
  61. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/remote.py +0 -0
  62. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/server.py +0 -0
  63. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tool_manager.py +0 -0
  64. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/__init__.py +0 -0
  65. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/action_plan.py +0 -0
  66. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/agent.py +0 -0
  67. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/analytics.py +0 -0
  68. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/audit.py +0 -0
  69. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/auth.py +0 -0
  70. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/billing.py +0 -0
  71. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/changelog.py +0 -0
  72. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/job.py +0 -0
  73. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/src/cited_mcp/tools/solution.py +0 -0
  74. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/tests/conftest.py +0 -0
  75. {cited_cli-0.3.14 → cited_cli-0.5.0}/packages/mcp/tests/test_auth_provider.py +0 -0
  76. {cited_cli-0.3.14 → cited_cli-0.5.0}/scripts/dev-install.sh +0 -0
  77. {cited_cli-0.3.14 → cited_cli-0.5.0}/scripts/mcp_test_harness.py +0 -0
  78. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/__init__.py +0 -0
  79. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/__main__.py +0 -0
  80. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/api/__init__.py +0 -0
  81. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/api/client.py +0 -0
  82. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/api/endpoints.py +0 -0
  83. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/app.py +0 -0
  84. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/auth/__init__.py +0 -0
  85. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/auth/oauth_server.py +0 -0
  86. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/auth/store.py +0 -0
  87. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/__init__.py +0 -0
  88. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/agent.py +0 -0
  89. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/analytics.py +0 -0
  90. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/audit.py +0 -0
  91. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/auth.py +0 -0
  92. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/config_cmd.py +0 -0
  93. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/job.py +0 -0
  94. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/mcp_cmd.py +0 -0
  95. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/named_audit.py +0 -0
  96. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/recommend.py +0 -0
  97. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/commands/solution.py +0 -0
  98. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/config/__init__.py +0 -0
  99. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/config/constants.py +0 -0
  100. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/config/manager.py +0 -0
  101. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/__init__.py +0 -0
  102. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/context.py +0 -0
  103. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/server.py +0 -0
  104. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/__init__.py +0 -0
  105. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/_helpers.py +0 -0
  106. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/audit.py +0 -0
  107. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/auth.py +0 -0
  108. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/business.py +0 -0
  109. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/job.py +0 -0
  110. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/recommend.py +0 -0
  111. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/mcp/tools/solution.py +0 -0
  112. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/output/__init__.py +0 -0
  113. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/output/formatter.py +0 -0
  114. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/output/progress.py +0 -0
  115. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/output/tables.py +0 -0
  116. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/utils/__init__.py +0 -0
  117. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/utils/errors.py +0 -0
  118. {cited_cli-0.3.14 → cited_cli-0.5.0}/src/cited_cli/utils/interactive.py +0 -0
  119. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/__init__.py +0 -0
  120. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/conftest.py +0 -0
  121. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_api_client.py +0 -0
  122. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_auth.py +0 -0
  123. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_config.py +0 -0
  124. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_live_pipeline.py +0 -0
  125. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_mcp_tools.py +0 -0
  126. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_output.py +0 -0
  127. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_pipeline.py +0 -0
  128. {cited_cli-0.3.14 → cited_cli-0.5.0}/tests/test_version.py +0 -0
@@ -1,23 +1,23 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cited-cli
3
- Version: 0.3.14
3
+ Version: 0.5.0
4
4
  Summary: CLI for the Cited GEO platform
5
5
  Author-email: Cited <support@youcited.com>
6
6
  License-Expression: LicenseRef-Proprietary
7
7
  License-File: LICENSE
8
8
  Requires-Python: >=3.11
9
- Requires-Dist: cited-core>=0.3.14
9
+ Requires-Dist: cited-core>=0.5.0
10
10
  Requires-Dist: rich>=13.0.0
11
11
  Requires-Dist: typer>=0.15.0
12
12
  Provides-Extra: dev
13
- Requires-Dist: cited-mcp>=0.3.14; extra == 'dev'
13
+ Requires-Dist: cited-mcp>=0.5.0; extra == 'dev'
14
14
  Requires-Dist: mypy>=1.10; extra == 'dev'
15
15
  Requires-Dist: pytest>=8.0; extra == 'dev'
16
16
  Requires-Dist: respx>=0.21; extra == 'dev'
17
17
  Requires-Dist: ruff>=0.4; extra == 'dev'
18
18
  Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
19
19
  Provides-Extra: mcp
20
- Requires-Dist: cited-mcp>=0.3.14; extra == 'mcp'
20
+ Requires-Dist: cited-mcp>=0.5.0; extra == 'mcp'
21
21
  Description-Content-Type: text/markdown
22
22
 
23
23
  # Cited CLI
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cited-core"
7
- version = "0.3.14"
7
+ version = "0.5.0"
8
8
  description = "Core library for the Cited GEO platform"
9
9
  license = "LicenseRef-Proprietary"
10
10
  requires-python = ">=3.11"
@@ -0,0 +1 @@
1
+ __version__ = "0.5.0"
@@ -40,6 +40,15 @@ class CitedClient:
40
40
  def close(self) -> None:
41
41
  self._client.close()
42
42
 
43
+ def set_request_id(self, request_id: str | None) -> None:
44
+ """Stamp X-Request-ID on subsequent outgoing requests so the cited
45
+ backend can echo it in its access logs and produce end-to-end traces.
46
+ Pass None to clear."""
47
+ if request_id:
48
+ self._client.headers["X-Request-ID"] = request_id
49
+ else:
50
+ self._client.headers.pop("X-Request-ID", None)
51
+
43
52
  def __enter__(self) -> CitedClient:
44
53
  return self
45
54
 
@@ -23,6 +23,7 @@ BUSINESS = "/businesses/{business_id}"
23
23
  BUSINESS_LOGO = "/businesses/{business_id}/logo"
24
24
  HEALTH_SCORES = "/businesses/{business_id}/health-scores"
25
25
  HEALTH_SCORES_BREAKDOWN = "/businesses/{business_id}/health-scores/breakdown"
26
+ PROFILE_COMPETITORS = "/businesses/{business_id}/profile-competitors"
26
27
 
27
28
  # Business Crawl
28
29
  CRAWL_DATA = "/businesses/{business_id}/crawl-data"
@@ -77,9 +78,16 @@ HQ_PRIORITY_STATUS = "/businesses/{business_id}/hq/priority/{action_id}/status"
77
78
  HQ_PRIORITY_SUMMARY = "/businesses/{business_id}/hq/priority/summary"
78
79
  HQ_EXPORT_PDF = "/businesses/{business_id}/hq/export/pdf"
79
80
  HQ_RECOMPUTE = "/businesses/{business_id}/hq/recompute"
81
+ HQ_OVERVIEW_REFRESH_AUDIT = "/businesses/{business_id}/overview/refresh-audit"
82
+ HQ_OVERVIEW_REFRESH_RECS = "/businesses/{business_id}/overview/refresh-recommendations"
83
+ HQ_OVERVIEW_REFRESH_ALL = "/businesses/{business_id}/overview/refresh-all"
84
+ HQ_AGENT_BRIEF = "/businesses/{business_id}/agent-brief"
80
85
  PERSONAS = "/businesses/{business_id}/personas"
86
+ PERSONA = "/businesses/{business_id}/personas/{persona_id}"
81
87
  PRODUCTS = "/businesses/{business_id}/products"
88
+ PRODUCT = "/businesses/{business_id}/products/{product_id}"
82
89
  BUYER_INTENTS = "/businesses/{business_id}/buyer-intents"
90
+ BUYER_INTENT = "/businesses/{business_id}/buyer-intents/{intent_id}"
83
91
  AGENTIC_READINESS = "/businesses/{business_id}/agentic-readiness"
84
92
  TRUST_SIGNALS = "/businesses/{business_id}/trust-signals"
85
93
 
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cited-mcp"
7
- version = "0.3.14"
7
+ version = "0.5.0"
8
8
  description = "MCP server for the Cited GEO platform"
9
9
  readme = "README.md"
10
10
  license = "LicenseRef-Proprietary"
11
11
  requires-python = ">=3.11"
12
12
  authors = [{ name = "Cited", email = "support@youcited.com" }]
13
13
  dependencies = [
14
- "cited-core>=0.3.14",
14
+ "cited-core>=0.5.0",
15
15
  "mcp>=1.27.0",
16
16
  "PyJWT>=2.8.0",
17
17
  "PyYAML>=6.0",
@@ -43,6 +43,18 @@ _SCALE_TOOLS: set[str] = {
43
43
  "mark_action_done",
44
44
  "dismiss_action",
45
45
  "get_action_progress",
46
+ "set_profile_competitors",
47
+ "create_persona",
48
+ "update_persona",
49
+ "delete_persona",
50
+ "create_product",
51
+ "update_product",
52
+ "delete_product",
53
+ "create_buyer_intent",
54
+ "update_buyer_intent",
55
+ "delete_buyer_intent",
56
+ "recompute_health_scores",
57
+ "refresh_business_overview",
46
58
  }
47
59
 
48
60
  # Tools restricted to pro+ tier
@@ -54,6 +66,7 @@ _PRO_TOOLS: set[str] = {
54
66
  "get_semantic_health",
55
67
  "buyer_fit_query",
56
68
  "get_business_hq",
69
+ "get_agent_brief",
57
70
  "get_analytics_trends",
58
71
  "get_analytics_dashboard",
59
72
  "compare_audits",
@@ -156,6 +169,10 @@ _BASE_TOOLS: set[str] = {
156
169
  "get_business",
157
170
  "crawl_business",
158
171
  "get_health_scores",
172
+ "list_profile_competitors",
173
+ "list_personas",
174
+ "list_products",
175
+ "list_buyer_intents",
159
176
  "list_audit_templates",
160
177
  "get_audit_template",
161
178
  "start_audit",
@@ -21,6 +21,215 @@
21
21
  # this file.
22
22
 
23
23
  versions:
24
+ - version: "0.5.0"
25
+ released: "2026-05-11"
26
+ # Three new read-only list_* tools to enable persona/product/buyer-intent
27
+ # CRUD flows (agents need IDs before they can call update/delete), plus a
28
+ # significant parameter-schema expansion on update_business / create_business
29
+ # to cover the full canonical BusinessUpdate/CreateRequest field set. Also
30
+ # fixes a latent bug: update_business previously sent HTTP PUT against a
31
+ # backend PATCH route. Bumps minor (not patch) because update_business /
32
+ # create_business signature changes shift parameter ordering and clients
33
+ # diffing the fingerprint should pick this up as non-additive.
34
+ fingerprint: "5bef45100c53"
35
+ tools_added:
36
+ - name: list_personas
37
+ description: |
38
+ List buyer personas declared on the business profile. Required
39
+ before update_persona / delete_persona since the agent has no
40
+ other way to discover persona_ids.
41
+ - name: list_products
42
+ description: |
43
+ List products / service offerings declared on the business
44
+ profile. Required before update_product / delete_product to
45
+ discover product_ids.
46
+ - name: list_buyer_intents
47
+ description: |
48
+ List buyer-intent entries declared on the business profile.
49
+ Use before recommending a new create_buyer_intent to avoid
50
+ overlapping entries.
51
+ - name: update_buyer_intent
52
+ description: |
53
+ Update a buyer-intent entry (question, intent_type, priority,
54
+ is_answered, answering_page_url — all optional). Closes the
55
+ persona/product CRUD symmetry. Requires the cited backend with
56
+ PATCH /businesses/{id}/buyer-intents/{intent_id} (added in
57
+ companion backend PR).
58
+ - name: delete_buyer_intent
59
+ description: |
60
+ Delete a buyer intent. Confirm with the user before calling —
61
+ there's no undo. Requires the cited backend with
62
+ DELETE /businesses/{id}/buyer-intents/{intent_id}.
63
+ tools_changed:
64
+ - name: update_business
65
+ change_summary: |
66
+ Parameter set expanded from 4 fields (name, website, description,
67
+ industry) to the full BusinessUpdateRequest schema: adds
68
+ one_line_description, primary_customer, problem_solved,
69
+ offering_type, primary_market, service_areas,
70
+ headquarters_country, goals, discovery_channels,
71
+ success_definition, plus primary-location fields (address, city,
72
+ region, country). All new params are optional and keyword-only.
73
+ Also fixes a method bug: now sends PATCH (was PUT) to match the
74
+ backend @router.patch route.
75
+ - name: create_business
76
+ change_summary: |
77
+ Parameter set expanded to the full BusinessCreateRequest schema:
78
+ description is now optional (server composes from structured
79
+ fields if omitted); adds one_line_description, primary_customer,
80
+ problem_solved, offering_type, primary_market, service_areas,
81
+ headquarters_country, goals, discovery_channels,
82
+ success_definition. Existing 4-field callers unaffected
83
+ (description was already accepted; making it optional is
84
+ backward-compatible).
85
+
86
+ - version: "0.4.0"
87
+ released: "2026-05-08"
88
+ # 12 new tools + docstring/parameter-schema edits on 4 existing tools —
89
+ # significant surface expansion, so the minor version bumps to 0.4.0
90
+ # to signal a non-additive-only release for clients that diff the
91
+ # fingerprint.
92
+ fingerprint: "8197f97dcd06"
93
+ tools_added:
94
+ - name: get_agent_brief
95
+ description: |
96
+ Single-call composite "what should I focus on right now?" —
97
+ top priority actions, quick wins, failing deterministic checks,
98
+ and recent citation-rate movement. Designed to replace
99
+ chained get_business_hq + get_quick_wins + check_status calls
100
+ in opening-turn agent flows.
101
+ - name: list_profile_competitors
102
+ description: |
103
+ List the user-declared competitors on a business profile.
104
+ These bypass third-party domain filtering and rank ahead of
105
+ citation-only picks in head-to-head comparisons.
106
+ - name: set_profile_competitors
107
+ description: |
108
+ Replace the full list of profile competitors (max 10).
109
+ Pass [{name, website}] entries; PUT replaces. Use when the
110
+ user reports an obviously-relevant rival missing from H2H.
111
+ - name: recompute_health_scores
112
+ description: |
113
+ Force a fresh recomputation of business health scores after
114
+ profile/HQ edits — no crawl, no audit, just re-derive from
115
+ existing data.
116
+ - name: refresh_business_overview
117
+ description: |
118
+ Refresh cached audit / recommendation overview projections
119
+ for a business. scope ∈ {audit, recommendations, all}.
120
+ - name: create_persona
121
+ description: Create a target buyer persona on a business.
122
+ - name: update_persona
123
+ description: Update a persona (partial — only changed fields).
124
+ - name: delete_persona
125
+ description: Delete a persona.
126
+ - name: create_product
127
+ description: Create a product/service offering on a business.
128
+ - name: update_product
129
+ description: Update a product (partial).
130
+ - name: delete_product
131
+ description: Delete a product.
132
+ - name: create_buyer_intent
133
+ description: |
134
+ Create a buyer-intent entry tying personas to products
135
+ through specific decision moments — drives audit question
136
+ generation and per-intent coverage scoring.
137
+ tools_changed:
138
+ - name: get_business_hq
139
+ change_summary: |
140
+ New include flags ``include_agentic_readiness`` and
141
+ ``include_trust_signals`` add the agentic-readiness summary
142
+ and trust-signal evidence to the dashboard payload. Existing
143
+ callers are unaffected — both default to false.
144
+ - name: get_competitive_comparison
145
+ change_summary: |
146
+ Docstring now describes the new ``analysis_status`` and
147
+ ``last_analysis_run_at`` freshness fields on the response
148
+ (added in cited backend commit 2c716be). Tool behavior is
149
+ unchanged — these were already passed through; the docstring
150
+ was previously silent about them.
151
+ - name: get_recommendation_check_status
152
+ change_summary: |
153
+ Updated for Validation Engine Tier 4: now runs 72
154
+ deterministic checks (was 62). New checks fill
155
+ monitoring_adaptation and original_research domains
156
+ (knowledge_graph_linkage, aggregate_rating_present,
157
+ author_bio_on_blog_posts, sitemap_lastmod_freshness,
158
+ outbound_authority_citations, hreflang_and_lang_consistency,
159
+ well_known_agent_discovery). Response shape unchanged.
160
+ - name: crawl_business
161
+ change_summary: |
162
+ Docstring now notes the post-crawl auto-fill side effect:
163
+ empty business-profile fields (description, founding year,
164
+ NAICS, sameAs links) are populated from JSON-LD / meta tags
165
+ found on the homepage. User-supplied values are never
166
+ overwritten. (cited backend CIT-148.)
167
+ tools_removed: []
168
+ behavior_changed:
169
+ - area: plan_gating
170
+ change_summary: |
171
+ Tier assignments for the new tools:
172
+ - base (all tiers): ``list_profile_competitors``
173
+ - scale: ``set_profile_competitors``,
174
+ ``create/update/delete_persona``,
175
+ ``create/update/delete_product``,
176
+ ``create_buyer_intent``,
177
+ ``recompute_health_scores``,
178
+ ``refresh_business_overview``
179
+ - pro: ``get_agent_brief`` (matches the ``get_business_hq``
180
+ tier — same composite-dashboard semantics).
181
+
182
+ - version: "0.3.15"
183
+ released: "2026-05-05"
184
+ # Fingerprint unchanged from 0.3.14 image runtime — pure observability +
185
+ # logging-enrichment release; no tool surface change. (The 0.3.14 entry
186
+ # below pins defa3022aedb, which was the host-venv compute at release
187
+ # prep — differing from the deployed image's 1c4fed943fff. Future
188
+ # entries should pin runtime fingerprints; this collision is benign
189
+ # because there's nothing in the surface for clients to act on.)
190
+ fingerprint: "1c4fed943fff"
191
+ tools_added: []
192
+ tools_changed: []
193
+ tools_removed: []
194
+ behavior_changed:
195
+ - area: structured_logging
196
+ change_summary: |
197
+ Every ``tool_call`` log line now carries:
198
+ - ``server_version`` and ``tools_fingerprint`` (so log entries
199
+ self-identify which build emitted them)
200
+ - ``deployment_id`` from ``CITED_DEPLOYMENT_ID`` env var
201
+ (format ``<env>-<short-sha>-<unix-ts>``, set by the deploy
202
+ script — uniquely identifies a single deploy attempt)
203
+ - ``client_id`` extracted from the OAuth JWT (lets us tell
204
+ Claude Desktop traffic from Claude.ai traffic)
205
+ - ``resources`` map with ID-shaped kwargs (``business_id``,
206
+ ``audit_id``, ``job_id``, ``source_id``, etc.) — enough to
207
+ correlate user activity with backend records, never raw
208
+ content like buyer profiles or audit descriptions.
209
+ On failures the line now also carries ``error_type`` and
210
+ ``status_code`` pulled from the typed-error response, so the
211
+ dashboard can categorise failures without grepping messages.
212
+ - area: end_to_end_tracing
213
+ change_summary: |
214
+ The MCP now stamps ``X-Request-ID`` on every outgoing call to
215
+ the cited backend (matching the ``request_id`` already in the
216
+ tool_call log line). The backend can echo this to its own
217
+ access logs to produce end-to-end traces — when a customer
218
+ reports "buyer_fit_query 500 with request_id abc123" the
219
+ owner can find both MCP-side and backend-side log entries
220
+ for the same request.
221
+ - area: deploy_pipeline
222
+ change_summary: |
223
+ Companion ``deploy-mcp.sh`` improvements (cited-mcp-infra
224
+ repo, commit 5542667): split log groups (prod writes to
225
+ ``/ecs/cited-mcp-prod`` instead of mixing into the dev
226
+ group), real stability check that fails the deploy when ECS
227
+ silently rolls back to a prior task definition (the failure
228
+ mode that hid today's IAM-blocked prod deploy), and
229
+ deployment_id stamping. CloudWatch dashboard ``cited-mcp``
230
+ + saved Insights queries (``cited-mcp/usage/per-user`` etc.)
231
+ + failure-burst alarms also added.
232
+
24
233
  - version: "0.3.14"
25
234
  released: "2026-05-05"
26
235
  fingerprint: "defa3022aedb"