dc-mcp 0.1.4__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.
@@ -0,0 +1,306 @@
1
+
2
+ # Created by https://www.toptal.com/developers/gitignore/api/macos,python,pycharm
3
+ # Edit at https://www.toptal.com/developers/gitignore?templates=macos,python,pycharm
4
+
5
+ ### macOS ###
6
+ # General
7
+ .DS_Store
8
+ .AppleDouble
9
+ .LSOverride
10
+
11
+ # Icon must end with two \r
12
+ Icon
13
+
14
+
15
+ # Thumbnails
16
+ ._*
17
+
18
+ # Files that might appear in the root of a volume
19
+ .DocumentRevisions-V100
20
+ .fseventsd
21
+ .Spotlight-V100
22
+ .TemporaryItems
23
+ .Trashes
24
+ .VolumeIcon.icns
25
+ .com.apple.timemachine.donotpresent
26
+
27
+ # Directories potentially created on remote AFP share
28
+ .AppleDB
29
+ .AppleDesktop
30
+ Network Trash Folder
31
+ Temporary Items
32
+ .apdisk
33
+
34
+ ### PyCharm ###
35
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
36
+ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
37
+
38
+ .idea
39
+
40
+ # User-specific stuff
41
+ .idea/**/workspace.xml
42
+ .idea/**/tasks.xml
43
+ .idea/**/usage.statistics.xml
44
+ .idea/**/dictionaries
45
+ .idea/**/shelf
46
+
47
+ # Generated files
48
+ .idea/**/contentModel.xml
49
+
50
+ # Sensitive or high-churn files
51
+ .idea/**/dataSources/
52
+ .idea/**/dataSources.ids
53
+ .idea/**/dataSources.local.xml
54
+ .idea/**/sqlDataSources.xml
55
+ .idea/**/dynamic.xml
56
+ .idea/**/uiDesigner.xml
57
+ .idea/**/dbnavigator.xml
58
+
59
+ # Gradle
60
+ .idea/**/gradle.xml
61
+ .idea/**/libraries
62
+
63
+ # Gradle and Maven with auto-import
64
+ # When using Gradle or Maven with auto-import, you should exclude module files,
65
+ # since they will be recreated, and may cause churn. Uncomment if using
66
+ # auto-import.
67
+ # .idea/artifacts
68
+ # .idea/compiler.xml
69
+ # .idea/jarRepositories.xml
70
+ # .idea/modules.xml
71
+ # .idea/*.iml
72
+ # .idea/modules
73
+ # *.iml
74
+ # *.ipr
75
+
76
+ # CMake
77
+ cmake-build-*/
78
+
79
+ # Mongo Explorer plugin
80
+ .idea/**/mongoSettings.xml
81
+
82
+ # File-based project format
83
+ *.iws
84
+
85
+ # IntelliJ
86
+ out/
87
+
88
+ # mpeltonen/sbt-idea plugin
89
+ .idea_modules/
90
+
91
+ # JIRA plugin
92
+ atlassian-ide-plugin.xml
93
+
94
+ # Cursive Clojure plugin
95
+ .idea/replstate.xml
96
+
97
+ # Crashlytics plugin (for Android Studio and IntelliJ)
98
+ com_crashlytics_export_strings.xml
99
+ crashlytics.properties
100
+ crashlytics-build.properties
101
+ fabric.properties
102
+
103
+ # Editor-based Rest Client
104
+ .idea/httpRequests
105
+
106
+ # Android studio 3.1+ serialized cache file
107
+ .idea/caches/build_file_checksums.ser
108
+
109
+ ### PyCharm Patch ###
110
+ # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
111
+
112
+ # *.iml
113
+ # modules.xml
114
+ # .idea/misc.xml
115
+ # *.ipr
116
+
117
+ # Sonarlint plugin
118
+ # https://plugins.jetbrains.com/plugin/7973-sonarlint
119
+ .idea/**/sonarlint/
120
+
121
+ # SonarQube Plugin
122
+ # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
123
+ .idea/**/sonarIssues.xml
124
+
125
+ # Markdown Navigator plugin
126
+ # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
127
+ .idea/**/markdown-navigator.xml
128
+ .idea/**/markdown-navigator-enh.xml
129
+ .idea/**/markdown-navigator/
130
+
131
+ # Cache file creation bug
132
+ # See https://youtrack.jetbrains.com/issue/JBR-2257
133
+ .idea/$CACHE_FILE$
134
+
135
+ # CodeStream plugin
136
+ # https://plugins.jetbrains.com/plugin/12206-codestream
137
+ .idea/codestream.xml
138
+
139
+ ### Python ###
140
+ # Byte-compiled / optimized / DLL files
141
+ __pycache__/
142
+ *.py[cod]
143
+ *$py.class
144
+
145
+ # C extensions
146
+ *.so
147
+
148
+ # Distribution / packaging
149
+ .Python
150
+ build/
151
+ develop-eggs/
152
+ dist/
153
+ downloads/
154
+ eggs/
155
+ .eggs/
156
+ parts/
157
+ sdist/
158
+ var/
159
+ wheels/
160
+ pip-wheel-metadata/
161
+ share/python-wheels/
162
+ *.egg-info/
163
+ .installed.cfg
164
+ *.egg
165
+ MANIFEST
166
+
167
+ # PyInstaller
168
+ # Usually these files are written by a python script from a template
169
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
170
+ *.manifest
171
+ *.spec
172
+
173
+ # Installer logs
174
+ pip-log.txt
175
+ pip-delete-this-directory.txt
176
+
177
+ # Unit test / coverage reports
178
+ htmlcov/
179
+ .tox/
180
+ .nox/
181
+ .coverage
182
+ .coverage.*
183
+ .cache
184
+ nosetests.xml
185
+ coverage.xml
186
+ *.cover
187
+ *.py,cover
188
+ .hypothesis/
189
+ .pytest_cache/
190
+ pytestdebug.log
191
+
192
+ # Translations
193
+ *.mo
194
+ *.pot
195
+
196
+ # Django stuff:
197
+ *.log
198
+ local_settings.py
199
+ db.sqlite3
200
+ db.sqlite3-journal
201
+
202
+ # Flask stuff:
203
+ instance/
204
+ .webassets-cache
205
+
206
+ # Scrapy stuff:
207
+ .scrapy
208
+
209
+ # Sphinx documentation
210
+ docs/_build/
211
+ doc/_build/
212
+
213
+ # PyBuilder
214
+ target/
215
+
216
+ # Jupyter Notebook
217
+ .ipynb_checkpoints
218
+
219
+ # IPython
220
+ profile_default/
221
+ ipython_config.py
222
+
223
+ # pyenv
224
+ .python-version
225
+
226
+ # pipenv
227
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
228
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
229
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
230
+ # install all needed dependencies.
231
+ #Pipfile.lock
232
+
233
+ # poetry
234
+ #poetry.lock
235
+
236
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
237
+ __pypackages__/
238
+
239
+ # Celery stuff
240
+ celerybeat-schedule
241
+ celerybeat.pid
242
+
243
+ # SageMath parsed files
244
+ *.sage.py
245
+
246
+ # Environments
247
+ .env
248
+ .env/
249
+ .venv/
250
+ env/
251
+ venv/
252
+ ENV/
253
+ env.bak/
254
+ venv.bak/
255
+ pythonenv*
256
+
257
+ # Spyder project settings
258
+ .spyderproject
259
+ .spyproject
260
+
261
+ # Rope project settings
262
+ .ropeproject
263
+
264
+ # mkdocs documentation
265
+ /site
266
+
267
+ # mypy
268
+ .mypy_cache/
269
+ .dmypy.json
270
+ dmypy.json
271
+
272
+ # Pyre type checker
273
+ .pyre/
274
+
275
+ # pytype static type analyzer
276
+ .pytype/
277
+
278
+ # operating system-related files
279
+ # file properties cache/storage on macOS
280
+ *.DS_Store
281
+ # thumbnail cache on Windows
282
+ Thumbs.db
283
+
284
+ # profiling data
285
+ .prof
286
+
287
+
288
+ # End of https://www.toptal.com/developers/gitignore/api/macos,python,pycharm
289
+ /cdk.out/
290
+
291
+ /agentcore/build/
292
+ memory-bank/
293
+ .cursor/
294
+
295
+ # GraphQL KB generated files
296
+ schema-docs-v2/
297
+ schema-docs-old/
298
+
299
+
300
+ # VS Code
301
+ .vscode/launch.json
302
+
303
+
304
+ # schema-docs-v2
305
+ schema-docs-v2/
306
+ schema-docs-old/
dc_mcp-0.1.4/PKG-INFO ADDED
@@ -0,0 +1,28 @@
1
+ Metadata-Version: 2.4
2
+ Name: dc-mcp
3
+ Version: 0.1.4
4
+ Summary: MCP client for the DoControl multi-agent assistant. Bridges Cursor (stdio) to the DoControl AgentCore gateway with Cognito authentication.
5
+ Project-URL: Homepage, https://docontrol.io
6
+ Project-URL: Repository, https://github.com/docontrol-io/dot
7
+ Author: DoControl
8
+ License: MIT
9
+ Keywords: ai,cursor,docontrol,mcp,saas-security
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Requires-Python: >=3.10
20
+ Requires-Dist: httpx>=0.27
21
+ Requires-Dist: keyring>=24.0
22
+ Requires-Dist: mcp>=1.0
23
+ Requires-Dist: pydantic-settings>=2.0
24
+ Requires-Dist: pydantic>=2.0
25
+ Provides-Extra: dev
26
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
27
+ Requires-Dist: pytest-httpx>=0.30; extra == 'dev'
28
+ Requires-Dist: pytest>=8.0; extra == 'dev'
dc_mcp-0.1.4/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # dc-mcp
2
+
3
+ Stdio MCP (Model Context Protocol) client for the DoControl multi-agent assistant. Connect Cursor (or any MCP-compatible client) to your DoControl tenant in under 60 seconds.
4
+
5
+ ## Quick start
6
+
7
+ ### 1. Install uv (one-time, if not already installed)
8
+
9
+ ```bash
10
+ curl -LsSf https://astral.sh/uv/install.sh | sh
11
+ ```
12
+
13
+ ### 2. Authenticate with your DoControl refresh token
14
+
15
+ ```bash
16
+ uvx dc-mcp login
17
+ ```
18
+
19
+ ### 3. Add to `~/.cursor/mcp.json`
20
+
21
+ ```jsonc
22
+ {
23
+ "mcpServers": {
24
+ "docontrol": {
25
+ "command": "uvx",
26
+ "args": ["dc-mcp"]
27
+ }
28
+ }
29
+ }
30
+ ```
31
+
32
+ Then restart Cursor. The DoControl tools will appear in the chat sidebar.
33
+
34
+ ## Get your refresh token
35
+
36
+ Log in to https://app.docontrol.io, navigate to **Settings → Integrations → MCP Token**, and click **Generate**. The token is valid for 30 days; you can regenerate it at any time.
37
+
38
+ When your token expires, simply run `uvx dc-mcp login` again with the new refresh token.
39
+
40
+ ## CLI reference
41
+
42
+ | Command | What it does |
43
+ | --- | --- |
44
+ | `dc-mcp` | Run the stdio MCP server (this is what Cursor invokes) |
45
+ | `dc-mcp login` | Store a refresh token in your OS keychain |
46
+ | `dc-mcp logout` | Clear the stored refresh token |
47
+ | `dc-mcp whoami` | Show your current authentication info |
48
+ | `dc-mcp --version` | Print the installed version |
49
+ | `dc-mcp --help` | Show CLI help |
50
+
51
+ ## CI / headless / corporate environments
52
+
53
+ For environments where the OS keychain is unavailable (CI runners, headless Linux containers, devcontainers without Secret Service), set the refresh token via environment variable:
54
+
55
+ ```bash
56
+ export DOCONTROL_REFRESH_TOKEN="..."
57
+ ```
58
+
59
+ Then configure your MCP server to pass it through:
60
+
61
+ ```jsonc
62
+ {
63
+ "mcpServers": {
64
+ "docontrol": {
65
+ "command": "uvx",
66
+ "args": ["dc-mcp"],
67
+ "env": {
68
+ "DOCONTROL_REFRESH_TOKEN": "${env:DOCONTROL_REFRESH_TOKEN}"
69
+ }
70
+ }
71
+ }
72
+ }
73
+ ```
74
+
75
+ The environment variable takes priority over the keychain when both are set.
76
+
77
+ ## Troubleshooting
78
+
79
+ **`error: Refresh token expired or revoked`**
80
+ Your refresh token is older than 30 days or has been revoked. Generate a new one in the DoControl webapp and run `dc-mcp login` again.
81
+
82
+ **`Network error contacting Cognito ... Check your internet connection or corporate proxy`**
83
+ You're behind a corporate firewall. Set `HTTPS_PROXY` to your proxy URL (e.g., `export HTTPS_PROXY=http://proxy.company.com:8080`).
84
+
85
+ **`Keychain unavailable: ... On headless Linux, set DOCONTROL_REFRESH_TOKEN env var instead`**
86
+ Your environment doesn't have a usable OS keychain (common in headless Linux or devcontainers). Use the environment variable approach from the CI section above.
87
+
88
+ **`No refresh token found`**
89
+ Either run `dc-mcp login` to store a token in your keychain, or set the `DOCONTROL_REFRESH_TOKEN` environment variable.
90
+
91
+ **No DoControl tools appear in Cursor**
92
+ Verify the syntax of `~/.cursor/mcp.json`, restart Cursor, then check **Cursor Settings → MCP** for connection errors. Run `dc-mcp whoami` to confirm your authentication is healthy.
93
+
94
+ **`uvx: command not found`**
95
+ Install uv with `curl -LsSf https://astral.sh/uv/install.sh | sh` and restart your shell.
96
+
97
+ ## Privacy and security
98
+
99
+ Refresh tokens are stored in your OS keychain (macOS Keychain, Windows Credential Vault, or Linux Secret Service). They never leave your machine other than to be exchanged with Cognito for short-lived access tokens.
100
+
101
+ Each request to DoControl uses a fresh access token with a one-hour time-to-live (TTL). All traffic is HTTPS to AWS-hosted endpoints. No telemetry is collected by the package.
102
+
103
+ To revoke access, run `dc-mcp logout` to clear the local token, and revoke server-side via the DoControl webapp's **Integrations** panel.
104
+
105
+ ## Development & contributing
106
+
107
+ This package is part of the [docontrol-io/dot](https://github.com/docontrol-io/dot) repository. To report issues, file a GitHub issue in the main repo. For implementation details and testing, see the package source in `packages/docontrol-mcp/src/` and tests in `packages/docontrol-mcp/tests/`.
108
+
109
+ ## License
110
+
111
+ MIT — see [LICENSE](../../LICENSE) in the repository root.
@@ -0,0 +1,48 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "dc-mcp"
7
+ version = "0.1.4"
8
+ description = "MCP client for the DoControl multi-agent assistant. Bridges Cursor (stdio) to the DoControl AgentCore gateway with Cognito authentication."
9
+ requires-python = ">=3.10"
10
+ license = {text = "MIT"}
11
+ authors = [{name = "DoControl"}]
12
+ keywords = ["mcp", "docontrol", "cursor", "ai", "saas-security"]
13
+ classifiers = [
14
+ "Development Status :: 3 - Alpha",
15
+ "Intended Audience :: Developers",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Topic :: Software Development :: Libraries :: Python Modules",
23
+ ]
24
+
25
+ dependencies = [
26
+ "mcp >= 1.0",
27
+ "httpx >= 0.27",
28
+ "keyring >= 24.0",
29
+ "pydantic >= 2.0",
30
+ "pydantic-settings >= 2.0",
31
+ ]
32
+
33
+ [project.optional-dependencies]
34
+ dev = [
35
+ "pytest >= 8.0",
36
+ "pytest-httpx >= 0.30",
37
+ "pytest-asyncio >= 0.23",
38
+ ]
39
+
40
+ [project.scripts]
41
+ dc-mcp = "docontrol_mcp_client.cli:main"
42
+
43
+ [project.urls]
44
+ Homepage = "https://docontrol.io"
45
+ Repository = "https://github.com/docontrol-io/dot"
46
+
47
+ [tool.hatch.build.targets.wheel]
48
+ packages = ["src/docontrol_mcp_client"]
@@ -0,0 +1,23 @@
1
+ {
2
+ "include": [
3
+ "src",
4
+ "tests"
5
+ ],
6
+ "exclude": [
7
+ "**/__pycache__",
8
+ "**/.*",
9
+ ".venv",
10
+ "dist",
11
+ "build"
12
+ ],
13
+ "extraPaths": [
14
+ "./src"
15
+ ],
16
+ "venvPath": ".",
17
+ "venv": ".venv",
18
+ "pythonVersion": "3.10",
19
+ "pythonPlatform": "Darwin",
20
+ "typeCheckingMode": "standard",
21
+ "useLibraryCodeForTypes": true,
22
+ "autoImportCompletions": true
23
+ }
@@ -0,0 +1,17 @@
1
+ """DoControl MCP client. See README for usage."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ # ``pyproject.toml`` is the single source of truth. Hatchling stamps
7
+ # the version into the installed dist's ``METADATA`` at build time, so
8
+ # ``--version`` and the MCP ``Server(version=...)`` handshake always
9
+ # mirror what was actually shipped — no parallel literal to keep in
10
+ # sync. Previously this file held a hardcoded ``"0.1.0"`` that drifted
11
+ # behind ``pyproject.toml`` (0.1.3) and silently lied to ``--version``.
12
+ __version__ = version("dc-mcp")
13
+ except PackageNotFoundError:
14
+ # Source-tree usage without an installed wheel (a fresh checkout
15
+ # before ``pip install -e .``). Surfacing the misconfig as an obviously
16
+ # fake version is more useful than guessing or crashing.
17
+ __version__ = "0.0.0+unknown"
@@ -0,0 +1,6 @@
1
+ """Entry point for `python -m docontrol_mcp_client`."""
2
+
3
+ from docontrol_mcp_client.cli import main
4
+
5
+ if __name__ == "__main__":
6
+ raise SystemExit(main())