dynamitecircle 2.0.1__tar.gz → 2.3.1__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.
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/.gitignore +4 -0
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/CHANGELOG.md +288 -5
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/PKG-INFO +130 -14
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/README.md +129 -13
- dynamitecircle-2.3.1/contracts/README.md +10 -0
- dynamitecircle-2.3.1/contracts/openapi.json +9103 -0
- dynamitecircle-2.3.1/contracts/operation-map.json +636 -0
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/docs/mcp-info.md +71 -0
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/docs/skill-info.md +24 -9
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/manifest.json +4 -10
- dynamitecircle-2.3.1/py/SKILL.md +542 -0
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/py/config.json +1 -1
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/py/dc.py +98 -10
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/py/requirements.txt +1 -1
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/pyproject.toml +11 -4
- dynamitecircle-2.3.1/server.json +17 -0
- dynamitecircle-2.3.1/ts/README.md +179 -0
- dynamitecircle-2.3.1/ts/examples/basic.ts +14 -0
- dynamitecircle-2.3.1/ts/package-lock.json +33 -0
- dynamitecircle-2.3.1/ts/package.json +53 -0
- dynamitecircle-2.3.1/ts/src/client.ts +475 -0
- dynamitecircle-2.3.1/ts/src/errors.ts +49 -0
- dynamitecircle-2.3.1/ts/src/index.ts +41 -0
- dynamitecircle-2.3.1/ts/src/types.ts +245 -0
- dynamitecircle-2.3.1/ts/src/version.ts +3 -0
- dynamitecircle-2.3.1/ts/tests/client.test.mjs +247 -0
- dynamitecircle-2.3.1/ts/tsconfig.json +17 -0
- dynamitecircle-2.0.1/py/SKILL.md +0 -460
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/LICENSE +0 -0
- {dynamitecircle-2.0.1 → dynamitecircle-2.3.1}/py/.env.dc.example +0 -0
|
@@ -13,10 +13,14 @@ __pycache__/
|
|
|
13
13
|
.venv*
|
|
14
14
|
*.egg-info/
|
|
15
15
|
dist/
|
|
16
|
+
|
|
17
|
+
# MCPB bundle — built in CI (publish.yml) + attached to releases; never commit
|
|
18
|
+
*.mcpb
|
|
16
19
|
build/
|
|
17
20
|
|
|
18
21
|
# Node (in case any tool ships a sub-app)
|
|
19
22
|
node_modules/
|
|
23
|
+
.npm-cache/
|
|
20
24
|
|
|
21
25
|
# OS
|
|
22
26
|
.DS_Store
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
All notable changes to the **`dc` client repo** (formerly `dc-official` /
|
|
4
4
|
`dc-py`) are listed here. The version
|
|
5
5
|
numbers below track `DC_API_VERSION` in [`py/dc.py`](py/dc.py), which is
|
|
6
|
-
deliberately aligned with the DC Member API
|
|
7
|
-
verified against.
|
|
8
|
-
bumps
|
|
6
|
+
deliberately aligned with the DC Member API contract version it was last
|
|
7
|
+
verified against. Python, TypeScript, and the API contract are released
|
|
8
|
+
together on purpose. Patch bumps from the API are silent; minor or major bumps
|
|
9
|
+
surface a one-shot stderr warning when an installed client falls behind.
|
|
9
10
|
|
|
10
11
|
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
11
12
|
and the project follows [Semantic Versioning](https://semver.org/) for
|
|
@@ -14,6 +15,286 @@ the public Python API surface (`dc.DC`, `dc.DCError`, `dc.Result`,
|
|
|
14
15
|
|
|
15
16
|
---
|
|
16
17
|
|
|
18
|
+
## [v2.3.1] - 2026-07-14
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- **`virtual-event-attendees`** — list the attendees (RSVP `yes`/`maybe`) of a Live Call: `dc virtual-event-attendees <sessionID> [--limit N] [--cursor TOKEN]`. Mirrors `event-attendees` — same paginated envelope, surfaces the true `total` (under `extra`) + `cursor`. TS: `client.virtualEvents.attendees(sessionID, { limit, cursor })`.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- Realigned `DC_API_VERSION` to the deployed Member API contract **2.3.1**. The server added the Live Call attendees endpoint plus cursor pagination and a true aggregate `total` on `GET /events/:eventID/attendees`; the pinned OpenAPI snapshot + operation-map were updated to match (no other client command changes since 2.0.4).
|
|
25
|
+
|
|
26
|
+
## [v2.0.4] - 2026-06-16
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- list in the Official MCP Registry (b2f1d26)
|
|
31
|
+
- one-click install badges, VS Code docs, and .mcpb bundle (6108d51)
|
|
32
|
+
- MCP tool annotations and structured output (9b62eb0)
|
|
33
|
+
- snake_case MCP tool names and fields (f4573f8)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [v2.0.1] - 2026-06-16
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- v2.0.1 — formal field names (breaking) to match Member API rename (2bb90f2)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## [v1.23.3] - 2026-06-13
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- dc.py help — sponsors/attendee-agenda/agendas are public (not ticket-gated) (9181cc8)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## [v1.22.6] - 2026-06-05
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
|
|
54
|
+
- explicit profile-update/calendar parsers + offline test suite (aecaca1)
|
|
55
|
+
- accept top-level --note on trip-create and trip-update (26a9c61)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## [v1.22.5] - 2026-06-03
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- accept declared args= flags on parser-less commands (MCP bridge) (267fad2)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## [v1.22.4] - 2026-05-27
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- align client with api 1.22.4 (3fe5f91)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
## [v1.22.3] - 2026-05-24
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
|
|
76
|
+
- 6 follow commands + Follows SKILL.md section (no version bump — pending server deploy) (5f19db6)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## [v1.20.1] - 2026-05-22
|
|
80
|
+
|
|
81
|
+
_No customer-facing changes in this release._
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
## [v1.19.3] - 2026-05-21
|
|
85
|
+
|
|
86
|
+
_No customer-facing changes in this release._
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
## [v1.19.2] - 2026-05-21
|
|
90
|
+
|
|
91
|
+
_No customer-facing changes in this release._
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
## [v1.17.3] - 2026-05-20
|
|
95
|
+
|
|
96
|
+
_No customer-facing changes in this release._
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
## [v1.17.2] - 2026-05-20
|
|
100
|
+
|
|
101
|
+
_No customer-facing changes in this release._
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
## [v1.17.1] - 2026-05-20
|
|
105
|
+
|
|
106
|
+
_No customer-facing changes in this release._
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
## [v1.17.0] - 2026-05-20
|
|
110
|
+
|
|
111
|
+
_No customer-facing changes in this release._
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
## [v1.16.2] - 2026-05-20
|
|
115
|
+
|
|
116
|
+
_No customer-facing changes in this release._
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
## [v1.14.1] - 2026-05-19
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- dc-py rooms — path-segment URLs + trim type enum (be09d76)
|
|
124
|
+
- dc 1.14.0 — room + room-messages; rooms enum adds direct/group (a7b8ea9)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
## [v1.13.1] - 2026-05-19
|
|
128
|
+
|
|
129
|
+
### Fixed
|
|
130
|
+
|
|
131
|
+
- stabilize MCP stdio transport (21c8022)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
## [v1.12.5] - 2026-05-14
|
|
135
|
+
|
|
136
|
+
_No customer-facing changes in this release._
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
## [v1.12.1] - 2026-05-08
|
|
140
|
+
|
|
141
|
+
_No customer-facing changes in this release._
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
## [v1.11.1] - 2026-05-07
|
|
145
|
+
|
|
146
|
+
_No customer-facing changes in this release._
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
## [v1.10.5] - 2026-05-07
|
|
150
|
+
|
|
151
|
+
_No customer-facing changes in this release._
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
## [v1.10.4] - 2026-05-04
|
|
155
|
+
|
|
156
|
+
_No customer-facing changes in this release._
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
## [v1.10.2] - 2026-05-04
|
|
160
|
+
|
|
161
|
+
_No customer-facing changes in this release._
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
## [v1.9.1] - 2026-05-04
|
|
165
|
+
|
|
166
|
+
_No customer-facing changes in this release._
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
## [v1.8.1] - 2026-05-04
|
|
170
|
+
|
|
171
|
+
_No customer-facing changes in this release._
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
## [v1.7.1] - 2026-05-03
|
|
175
|
+
|
|
176
|
+
_No customer-facing changes in this release._
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
## [v1.6.3] - 2026-05-02
|
|
180
|
+
|
|
181
|
+
### Fixed
|
|
182
|
+
|
|
183
|
+
- rewrite CLI smoke step + bump to 1.6.3 (b098dfe)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
## [v1.6.2] - 2026-05-02
|
|
187
|
+
|
|
188
|
+
### Added
|
|
189
|
+
|
|
190
|
+
- PyPI packaging (`dynamitecircle`) + publish workflow (77aefa4)
|
|
191
|
+
- add Gemini CLI pre-approval (.gemini/settings.json) (fd09acb)
|
|
192
|
+
- pre-approve dc MCP server + skill + CLI for Claude Code & Codex (4d234ec)
|
|
193
|
+
- flip canonical paths to /dc/ and /docs/, rename dc_skill.py → dc.py (42aa541)
|
|
194
|
+
|
|
195
|
+
### Changed
|
|
196
|
+
|
|
197
|
+
- monorepo restructure — repo renamed to dc, Python client moved to /py/ (80d7166)
|
|
198
|
+
- SKILL_VERSION → DC_API_VERSION; deduplicate Quick start sections in README (a1e99c6)
|
|
199
|
+
- User-Agent → 'dc-py/<version>' (e1b5a6a)
|
|
200
|
+
- rename Skill base class → Runtime; SkillError → DCError; SkillResult → Result (06a2c44)
|
|
201
|
+
- rename public class DCSkill → DC, rename doc files (bc9d04f)
|
|
202
|
+
|
|
203
|
+
### Fixed
|
|
204
|
+
|
|
205
|
+
- use only-include + bypass-selection so sdist ships py/ (c42abed)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
## [v1.6.1] - 2026-05-02
|
|
209
|
+
|
|
210
|
+
### Added
|
|
211
|
+
|
|
212
|
+
- add manifest.json + LICENSE; bump to 1.6.1 (8e949d6)
|
|
213
|
+
- add dc/ symlink shortcut + drop hardcoded command counts (96bc6a3)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
## [v1.6.0] - 2026-04-30
|
|
217
|
+
|
|
218
|
+
_No customer-facing changes in this release._
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
## [v1.5.0] - 2026-04-30
|
|
222
|
+
|
|
223
|
+
### Added
|
|
224
|
+
|
|
225
|
+
- add announcements + event-extras commands (10 new) (f4f901f)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
## [v1.3.0] - 2026-04-30
|
|
229
|
+
|
|
230
|
+
### Added
|
|
231
|
+
|
|
232
|
+
- add 429 retry handling and `limits` command (02bf994)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
## [v1.0.0] - 2026-04-30
|
|
236
|
+
|
|
237
|
+
_No customer-facing changes in this release._
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
## [Unreleased]
|
|
241
|
+
|
|
242
|
+
### Added
|
|
243
|
+
|
|
244
|
+
- TypeScript npm library scaffold under `ts/`, published as
|
|
245
|
+
`@dynamitecircle/dc`, with a hand-written SDK surface for every pinned
|
|
246
|
+
Member API operation. It is a library only: no CLI and no MCP server.
|
|
247
|
+
- Pinned OpenAPI contract under `contracts/` plus an explicit operation map
|
|
248
|
+
that validates API operation → Python command → TypeScript method parity.
|
|
249
|
+
|
|
250
|
+
## [2.0.4] – 2026-06-16
|
|
251
|
+
|
|
252
|
+
### Added
|
|
253
|
+
|
|
254
|
+
- **MCP tool annotations** — every tool now advertises `readOnlyHint` /
|
|
255
|
+
`destructiveHint` / `openWorldHint`, so clients can auto-approve reads and
|
|
256
|
+
flag writes. The read/write split is derived from each command's actual HTTP
|
|
257
|
+
verb and guarded by a test that re-derives it from source (no silent drift).
|
|
258
|
+
Write tools also carry a "⚠️ Write operation" note in their description,
|
|
259
|
+
mirroring the hosted MCP server.
|
|
260
|
+
- **Structured tool output** — object results (the list envelope
|
|
261
|
+
`{items, count, cursor, has_more}` and single records) are also returned as
|
|
262
|
+
MCP `structuredContent`, so structure-aware clients don't have to re-parse
|
|
263
|
+
the text. No `outputSchema` is declared (it would strictly validate every
|
|
264
|
+
response shape); lists/scalars remain text-only.
|
|
265
|
+
|
|
266
|
+
### Changed
|
|
267
|
+
|
|
268
|
+
- **BREAKING (MCP interface) — tool names and fields are now snake_case.**
|
|
269
|
+
MCP tool names switched from kebab-case to snake_case
|
|
270
|
+
(`mcp__dc__trip-create` → `mcp__dc__trip_create`), and tool argument fields
|
|
271
|
+
likewise (`event-id` → `event_id`, `start-date` → `start_date`). This aligns
|
|
272
|
+
the agent-facing MCP surface with the snake_case Python library
|
|
273
|
+
(`dc.trip_create()`) and the prevailing MCP tool-naming convention. The
|
|
274
|
+
**CLI is unchanged** (`dc trip-create`, `--start-date`). Wildcard allow-rules
|
|
275
|
+
like `mcp__dc__*` are unaffected; any config pinning a specific kebab tool
|
|
276
|
+
name must update it. `_call_tool` still accepts the legacy kebab form as a
|
|
277
|
+
transitional fallback.
|
|
278
|
+
|
|
279
|
+
### Docs / packaging
|
|
280
|
+
|
|
281
|
+
- Document the hosted MCP (`https://api.dynamitecircle.com/mcp`) and an
|
|
282
|
+
auto-updating `uvx` PyPI config; fix the `.venv/bin/python3` configs to bare
|
|
283
|
+
`python3`; unify `py/SKILL.md` (local client + hosted MCP) and add
|
|
284
|
+
`DC/SKILL.md`; add `tests/test_version_sync.py` guarding manifest/config
|
|
285
|
+
drift from `DC_API_VERSION`.
|
|
286
|
+
- **One-click install** — "Add to Cursor" and "Install in VS Code" badges for
|
|
287
|
+
the hosted MCP, a native VS Code section (`.vscode/mcp.json` + `code --add-mcp`),
|
|
288
|
+
and a `workflows`-first note for the ~80-tool surface.
|
|
289
|
+
- **`.mcpb` bundle** — the release workflow now builds a `dc.mcpb` (one-click
|
|
290
|
+
Claude Desktop install) via `mcpb pack` and attaches it to the GitHub release;
|
|
291
|
+
`.mcpbignore` keeps the bundle lean.
|
|
292
|
+
- **Official MCP Registry** — add `server.json` (`io.github.dynamitecircle/dc`,
|
|
293
|
+
listing the hosted streamable-HTTP endpoint) and a separate, isolated
|
|
294
|
+
`publish-mcp.yml` workflow that publishes it via GitHub OIDC on `v*` tags.
|
|
295
|
+
The registry feeds VS Code, Smithery, PulseMCP, and others. `server.json`
|
|
296
|
+
version is guarded by `tests/test_version_sync.py`.
|
|
297
|
+
|
|
17
298
|
## [2.0.1] – 2026-06-16
|
|
18
299
|
|
|
19
300
|
### Changed
|
|
@@ -227,7 +508,7 @@ cutover — were server-only with no client surface change, so no client release
|
|
|
227
508
|
|
|
228
509
|
No client-side change required — the `hint` field on 404 payloads
|
|
229
510
|
is already surfaced by `DCError`. Bump kept in lockstep with the
|
|
230
|
-
deployed
|
|
511
|
+
deployed API contract version per the triple-lock rule.
|
|
231
512
|
|
|
232
513
|
---
|
|
233
514
|
|
|
@@ -1071,7 +1352,9 @@ Tag exists but no PyPI release. Replaced by 1.6.3.
|
|
|
1071
1352
|
|
|
1072
1353
|
---
|
|
1073
1354
|
|
|
1074
|
-
[Unreleased]: https://github.com/dynamitecircle/dc/compare/v2.
|
|
1355
|
+
[Unreleased]: https://github.com/dynamitecircle/dc/compare/v2.3.1...HEAD
|
|
1356
|
+
[2.3.1]: https://github.com/dynamitecircle/dc/compare/v2.0.4...v2.3.1
|
|
1357
|
+
[2.0.4]: https://github.com/dynamitecircle/dc/compare/v2.0.1...v2.0.4
|
|
1075
1358
|
[2.0.1]: https://github.com/dynamitecircle/dc/releases/tag/v2.0.1
|
|
1076
1359
|
[1.23.3]: https://github.com/dynamitecircle/dc/releases/tag/v1.23.3
|
|
1077
1360
|
[1.22.6]: https://github.com/dynamitecircle/dc/releases/tag/v1.22.6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dynamitecircle
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.1
|
|
4
4
|
Summary: Official Python client for the public Dynamite Circle Member API. CLI, library, Agent Skill, and MCP server in one file.
|
|
5
5
|
Project-URL: Homepage, https://github.com/dynamitecircle/dc
|
|
6
6
|
Project-URL: Repository, https://github.com/dynamitecircle/dc
|
|
@@ -51,14 +51,18 @@ Provides-Extra: test
|
|
|
51
51
|
Requires-Dist: pytest>=7.0; extra == 'test'
|
|
52
52
|
Description-Content-Type: text/markdown
|
|
53
53
|
|
|
54
|
-
# DC Official
|
|
54
|
+
# DC Official Clients
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Official clients for the [Dynamite Circle Member API](https://www.dynamitecircle.com/developers/) — your own profile, trips, events, virtual events, tickets, invites, inbox, rooms, chapters, places lookup, and the weekly locator digest.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
The Python client is a single self-contained file. Zero dependencies (stdlib only). Works as a CLI, a Python library, **and** a [Model Context Protocol](https://modelcontextprotocol.io) server. Compatible with Claude Code, Claude Desktop, Codex CLI, Gemini CLI, Cursor, GitHub Copilot, and every other Agent Skills / MCP-compatible tool.
|
|
59
|
+
|
|
60
|
+
The TypeScript client is an npm library for trusted server-side TypeScript projects. It is not a CLI and not an MCP server.
|
|
59
61
|
|
|
60
62
|
```
|
|
61
|
-
py/dc.py
|
|
63
|
+
py/dc.py ← Python: CLI + library + MCP server
|
|
64
|
+
ts/src/ ← TypeScript: npm library
|
|
65
|
+
contracts/ ← pinned OpenAPI contract shared by both clients
|
|
62
66
|
```
|
|
63
67
|
|
|
64
68
|
## About the Dynamite Circle
|
|
@@ -153,6 +157,52 @@ The same `dc.py` file is shipped as **four** integrations — pick whichever fit
|
|
|
153
157
|
|
|
154
158
|
The `mcp` package is **lazy-imported** — Agent Skill / CLI / Python-library users never need it.
|
|
155
159
|
|
|
160
|
+
### TypeScript npm library
|
|
161
|
+
|
|
162
|
+
For TypeScript projects, use the package under [`ts/`](ts/):
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
import { DC } from "@dynamitecircle/dc";
|
|
166
|
+
|
|
167
|
+
const dc = new DC({ apiKey: process.env.DC_API_KEY! });
|
|
168
|
+
|
|
169
|
+
const profile = await dc.profile.get();
|
|
170
|
+
const trips = await dc.trips.list({ limit: 10 });
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Keep `dk_...` API keys server-side. Do not ship a member API key in browser JavaScript.
|
|
174
|
+
|
|
175
|
+
### Don't want to install anything? Use the hosted MCP
|
|
176
|
+
|
|
177
|
+
The DC Member API is **also a hosted MCP server** — a remote endpoint you point your AI app at, with nothing to clone, install, or update:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
https://api.dynamitecircle.com/mcp (Streamable HTTP)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
[](cursor://anysphere.cursor-deeplink/mcp/install?name=dc&config=eyJ1cmwiOiJodHRwczovL2FwaS5keW5hbWl0ZWNpcmNsZS5jb20vbWNwIn0=)
|
|
184
|
+
|
|
185
|
+
[](https://insiders.vscode.dev/redirect/mcp/install?name=dc&config=%7B%22url%22%3A%22https%3A%2F%2Fapi.dynamitecircle.com%2Fmcp%22%7D)
|
|
186
|
+
|
|
187
|
+
- **Claude Code:** `claude mcp add --transport http dc https://api.dynamitecircle.com/mcp`
|
|
188
|
+
- **Claude (web / Desktop / mobile):** Settings → Connectors → **Add custom connector** → paste the URL → **Connect**
|
|
189
|
+
- **VS Code:** click the badge above, or `code --add-mcp '{"name":"dc","url":"https://api.dynamitecircle.com/mcp"}'`
|
|
190
|
+
- **Cursor:** click the badge above, or add a custom MCP connector pointing at the URL
|
|
191
|
+
- **ChatGPT / any other MCP app:** add a custom / remote MCP connector pointing at the URL above
|
|
192
|
+
|
|
193
|
+
When prompted, **sign in with your DC account** (one-click OAuth) — or send a `dk_` key as `Authorization: Bearer`. The server is always on the current API version, so there's nothing to keep up to date.
|
|
194
|
+
|
|
195
|
+
**Hosted MCP vs. this client — which do I want?**
|
|
196
|
+
|
|
197
|
+
| You want… | Use |
|
|
198
|
+
|---|---|
|
|
199
|
+
| Zero install, always-current, just MCP tools in a chat app | **Hosted MCP** (URL above) |
|
|
200
|
+
| To call DC from your own Python code (`from dynamitecircle import DC`) | **This client** (library) |
|
|
201
|
+
| A local CLI (`dc profile`) or shell scripting | **This client** (CLI) |
|
|
202
|
+
| A local stdio MCP server (offline-capable, pin a version, dev against localhost) | **This client** (`dc --mcp`) |
|
|
203
|
+
|
|
204
|
+
The rest of this README is about **this client**. For the hosted MCP, the URL above is all you need.
|
|
205
|
+
|
|
156
206
|
## Features
|
|
157
207
|
|
|
158
208
|
- **Full Member API coverage** — read + write across every public endpoint (run `python3 py/dc.py help` for the live list)
|
|
@@ -214,7 +264,18 @@ Run `python3 py/dc.py help` for the full command list.
|
|
|
214
264
|
|
|
215
265
|
## Setup per AI tool
|
|
216
266
|
|
|
217
|
-
###
|
|
267
|
+
### Hosted MCP (no install, always current)
|
|
268
|
+
|
|
269
|
+
Nothing to clone or update — point your tool at the remote endpoint:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
# Claude Code
|
|
273
|
+
claude mcp add --transport http dc https://api.dynamitecircle.com/mcp
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
For Claude web / Desktop, Cursor, ChatGPT, and other MCP apps, add a **custom / remote connector** pointing at `https://api.dynamitecircle.com/mcp` (Streamable HTTP). Sign in with your DC account (OAuth) or send a `dk_` key as a Bearer header. Discovery is published at [`/.well-known/mcp.json`](https://api.dynamitecircle.com/.well-known/mcp.json). This is the lowest-effort path; everything below runs the client **locally** instead.
|
|
277
|
+
|
|
278
|
+
### Claude Code (local client)
|
|
218
279
|
|
|
219
280
|
`.mcp.json` is already shipped with this repo. Open the repo with `claude`:
|
|
220
281
|
|
|
@@ -231,9 +292,30 @@ pip install -r py/requirements.txt
|
|
|
231
292
|
|
|
232
293
|
Skill discovery (CLI + import) works automatically via `py/SKILL.md`.
|
|
233
294
|
|
|
295
|
+
#### Auto-updating local MCP via `uvx` (PyPI)
|
|
296
|
+
|
|
297
|
+
Prefer a local stdio server that **pulls the latest published client on every launch** with no clone to maintain? Use [`uv`](https://docs.astral.sh/uv/)'s `uvx` and pass your key in the `env` block:
|
|
298
|
+
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"mcpServers": {
|
|
302
|
+
"dc": {
|
|
303
|
+
"type": "stdio",
|
|
304
|
+
"command": "uvx",
|
|
305
|
+
"args": ["--refresh", "--from", "dynamitecircle[mcp]", "dc", "--mcp"],
|
|
306
|
+
"env": { "DC_API_KEY": "dk_<api-key>" }
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Notes: the console script is `dc` (not `dynamitecircle`), so `--from dynamitecircle[mcp]` is required — it both names the package and pulls the optional `mcp` extra. `--refresh` is what makes it auto-update; drop it to let `uvx` cache. The `DC_API_KEY` in `env` wins over any `.env.dc` (an ephemeral `uvx` install has none).
|
|
313
|
+
|
|
234
314
|
### Claude Desktop
|
|
235
315
|
|
|
236
|
-
|
|
316
|
+
**Easiest — one-click `.mcpb`:** download `dc.mcpb` from the [latest GitHub release](https://github.com/dynamitecircle/dc/releases/latest) and double-click it. Claude Desktop installs the `dc` server and prompts for your `DC_API_KEY` (no JSON editing). Requires Python 3.9+ with the `mcp` package available on your machine (`pip install 'dynamitecircle[mcp]'`). *(Or skip local install entirely and use the [hosted MCP connector](#hosted-mcp-no-install-always-current) above.)*
|
|
317
|
+
|
|
318
|
+
**Manual** — edit your config file:
|
|
237
319
|
|
|
238
320
|
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
239
321
|
- Linux: `~/.config/Claude/claude_desktop_config.json`
|
|
@@ -330,9 +412,19 @@ Non-paginated extras (e.g. `totalUnread` on `inbox`) are passed through under an
|
|
|
330
412
|
|
|
331
413
|
## Use as a Python library
|
|
332
414
|
|
|
415
|
+
Installed from PyPI (`pip install dynamitecircle`) — import by the package name:
|
|
416
|
+
|
|
417
|
+
```python
|
|
418
|
+
from dynamitecircle import DC
|
|
419
|
+
|
|
420
|
+
dc = DC()
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
Working from a clone instead? Point `sys.path` at the `py/` folder and import as `dc`:
|
|
424
|
+
|
|
333
425
|
```python
|
|
334
426
|
import sys
|
|
335
|
-
sys.path.insert(0, "
|
|
427
|
+
sys.path.insert(0, "py")
|
|
336
428
|
from dc import DC
|
|
337
429
|
|
|
338
430
|
dc = DC()
|
|
@@ -364,10 +456,23 @@ The full live reference for the DC Member API — every endpoint, parameter, and
|
|
|
364
456
|
|
|
365
457
|
## Staying up to date
|
|
366
458
|
|
|
367
|
-
The DC Member API ships new endpoints and refinements regularly. This skill is the official client and we update it whenever the API changes. **Plan for updates** — the skill will warn you on stderr the first time a request returns
|
|
459
|
+
The DC Member API ships new endpoints and refinements regularly. This skill is the official client and we update it whenever the API changes. **Plan for updates** — the skill will warn you on stderr the first time a request returns an `X-API-Version` newer than `DC_API_VERSION`, and major-version bumps may break older clients.
|
|
460
|
+
|
|
461
|
+
**The no-maintenance option:** if you use the [hosted MCP](#hosted-mcp-no-install-always-current) (`https://api.dynamitecircle.com/mcp`), there's nothing to update — the server always runs the current API version. The strategies below apply only to the **local client**.
|
|
368
462
|
|
|
369
463
|
Pick whichever integration style fits your project. From simplest to most isolated:
|
|
370
464
|
|
|
465
|
+
### 0. PyPI — `pip` / `uvx`
|
|
466
|
+
|
|
467
|
+
```bash
|
|
468
|
+
pip install dynamitecircle # CLI + library
|
|
469
|
+
pip install 'dynamitecircle[mcp]' # + local MCP server (dc --mcp)
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
Then `dc setup --api-key dk_<api-key>` and `dc self-test`. Update with `pip install --upgrade dynamitecircle`. For a local MCP that auto-updates on every launch, use the [`uvx` config above](#auto-updating-local-mcp-via-uvx-pypi).
|
|
473
|
+
|
|
474
|
+
Best for: the quickest local install, and the auto-updating `uvx` MCP setup.
|
|
475
|
+
|
|
371
476
|
### 1. Plain git clone — quick local use
|
|
372
477
|
|
|
373
478
|
```bash
|
|
@@ -458,7 +563,7 @@ Best for: CI environments, ephemeral containers, scripted setups.
|
|
|
458
563
|
|
|
459
564
|
- **Stay current.** The DC Member API ships new endpoints regularly and the client mirrors them; running stale means missing features and (eventually) compatibility warnings on stderr.
|
|
460
565
|
- **Run `self-test` after every update.** Five seconds, catches breakage.
|
|
461
|
-
- **Watch stderr the first time you call any command after updating.** The version-mismatch warning prints once per process when the
|
|
566
|
+
- **Watch stderr the first time you call any command after updating.** The version-mismatch warning prints once per process when the API is on a newer minor/major.
|
|
462
567
|
- **Major version bumps may be backwards-incompatible.** Read the release notes on the GitHub repo before pulling across a major boundary.
|
|
463
568
|
|
|
464
569
|
## Rate limits
|
|
@@ -504,7 +609,19 @@ dc/
|
|
|
504
609
|
│ ├── .env.dc.example # template
|
|
505
610
|
│ └── .env.dc # gitignored (created by `setup`)
|
|
506
611
|
│
|
|
507
|
-
|
|
612
|
+
├── ts/ # ← TypeScript npm library (@dynamitecircle/dc)
|
|
613
|
+
│ ├── src/ # hand-written SDK surface
|
|
614
|
+
│ ├── tests/ # contract + request behavior tests
|
|
615
|
+
│ ├── examples/ # TypeScript usage examples
|
|
616
|
+
│ ├── package.json
|
|
617
|
+
│ └── tsconfig.json
|
|
618
|
+
│
|
|
619
|
+
├── contracts/ # pinned API contract shared by clients
|
|
620
|
+
│ ├── openapi.json # committed snapshot of /openapi.json
|
|
621
|
+
│ └── operation-map.json # OpenAPI op → Python command → TS method
|
|
622
|
+
│
|
|
623
|
+
├── DC/
|
|
624
|
+
│ └── SKILL.md → ../py/SKILL.md # human-friendly skill path (symlink)
|
|
508
625
|
│
|
|
509
626
|
├── docs/ # ← REAL design docs (canonical)
|
|
510
627
|
│ ├── skill-info.md # design rules / architecture
|
|
@@ -527,9 +644,9 @@ dc/
|
|
|
527
644
|
|
|
528
645
|
### About the layout
|
|
529
646
|
|
|
530
|
-
This is a **monorepo**. The Python client lives at `/py
|
|
647
|
+
This is a **monorepo**. The Python client lives at `/py/`; the TypeScript client lives at `/ts/`. Both wrap the same DC Member API and are validated against the pinned contract in `/contracts/`. `/docs/` is shared. The dotfile-prefixed directories (`.claude/`, `.agents/`, `.gemini/`) exist because AI tools auto-discover skills from those specific paths — they're kept hidden but each one **symlinks (or points) straight to the canonical folder**, so you only edit files in one place. Edit `py/dc.py` and Claude Code, Codex, and Gemini CLI all see the same file via their respective discovery directories. Gemini CLI also reads `.agents/skills/` as an alias, so we don't need a redundant `.gemini/skills/` symlink.
|
|
531
648
|
|
|
532
|
-
If you're adding
|
|
649
|
+
If you're adding Python code or skill docs, edit `py/` (or `docs/`) directly. If you're adding TypeScript library code, edit `ts/`. The discovery folders take care of themselves.
|
|
533
650
|
|
|
534
651
|
### Pre-approval out of the box
|
|
535
652
|
|
|
@@ -542,4 +659,3 @@ This repo is maintained by the Dynamite Circle team. It's read-only for the publ
|
|
|
542
659
|
## License
|
|
543
660
|
|
|
544
661
|
[MIT](LICENSE) — see the LICENSE file for the full text.
|
|
545
|
-
|