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.
- dc_mcp-0.1.4/.gitignore +306 -0
- dc_mcp-0.1.4/PKG-INFO +28 -0
- dc_mcp-0.1.4/README.md +111 -0
- dc_mcp-0.1.4/pyproject.toml +48 -0
- dc_mcp-0.1.4/pyrightconfig.json +23 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/__init__.py +17 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/__main__.py +6 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/auth.py +319 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/cli.py +306 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/config.py +81 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/errors.py +17 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/keychain.py +96 -0
- dc_mcp-0.1.4/src/docontrol_mcp_client/proxy.py +674 -0
- dc_mcp-0.1.4/tests/__init__.py +0 -0
- dc_mcp-0.1.4/tests/test_auth.py +659 -0
- dc_mcp-0.1.4/tests/test_cli.py +678 -0
- dc_mcp-0.1.4/tests/test_keychain.py +227 -0
- dc_mcp-0.1.4/tests/test_proxy.py +1182 -0
dc_mcp-0.1.4/.gitignore
ADDED
|
@@ -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"
|