dataverse-mcp 3.2.0__tar.gz → 3.3.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.
- {dataverse_mcp-3.2.0/src/dataverse_mcp.egg-info → dataverse_mcp-3.3.0}/PKG-INFO +23 -4
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/README.md +22 -3
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/pyproject.toml +1 -1
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/_app.py +1 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/models.py +526 -4
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/server.py +1 -0
- dataverse_mcp-3.3.0/src/dataverse_mcp/tools/custom_apis.py +883 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/metadata.py +50 -2
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0/src/dataverse_mcp.egg-info}/PKG-INFO +23 -4
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp.egg-info/SOURCES.txt +1 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_tool_categories.py +80 -7
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/LICENSE +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/setup.cfg +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/__init__.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/batch.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/client.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/__init__.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/apps.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/connection_references.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/environment_variable_values.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/environment_variables.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/environments.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/forms.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/jobs.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/plugin_registration.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/plugins.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/security.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/solutions.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/tables.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/views.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp/tools/web_resources.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp.egg-info/dependency_links.txt +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp.egg-info/entry_points.txt +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp.egg-info/requires.txt +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/src/dataverse_mcp.egg-info/top_level.txt +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_auth_errors.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_batch.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_fetchxml.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_jobs.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_list_paging.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_odata_utils.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_plugin_registration.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_published_flag.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_record_crud.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_request_with_retry.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_solution_import_export.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_token_cache.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_url_allowlist.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_web_resources.py +0 -0
- {dataverse_mcp-3.2.0 → dataverse_mcp-3.3.0}/tests/test_xml_dos.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataverse-mcp
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3.0
|
|
4
4
|
Summary: An MCP server for interacting with Microsoft Dataverse environments during development
|
|
5
5
|
Author: Ryan James
|
|
6
6
|
License-Expression: MIT
|
|
@@ -32,7 +32,7 @@ Dynamic: license-file
|
|
|
32
32
|
[](https://pypi.org/project/dataverse-mcp/)
|
|
33
33
|
[](LICENSE)
|
|
34
34
|
|
|
35
|
-
An [MCP](https://modelcontextprotocol.io/) server that gives AI agents structured access to Microsoft Dataverse — query records, inspect metadata, manage schema, manage model-driven app forms, views, and apps, administer security roles, teams, and users, manage plug-in trace logging, and explore Power Platform environments.
|
|
35
|
+
An [MCP](https://modelcontextprotocol.io/) server that gives AI agents structured access to Microsoft Dataverse — query records, inspect metadata, manage schema, manage model-driven app forms, views, and apps, administer security roles, teams, and users, manage plug-in trace logging, manage custom APIs, and explore Power Platform environments.
|
|
36
36
|
|
|
37
37
|
Built with [FastMCP](https://github.com/modelcontextprotocol/python-sdk), `httpx`, and the Dataverse OData v4.0 Web API. Communicates over **stdio** and works with Claude, GitHub Copilot, and any MCP-compatible client.
|
|
38
38
|
|
|
@@ -372,7 +372,7 @@ A single server instance can target any Dataverse org — pass `dataverse_url` o
|
|
|
372
372
|
|
|
373
373
|
## Tools
|
|
374
374
|
|
|
375
|
-
**
|
|
375
|
+
**170 tools** grouped by domain below. Every tool returns JSON and requires `dataverse_url` on each call.
|
|
376
376
|
|
|
377
377
|
The **Gate** column shows when a tool is registered:
|
|
378
378
|
|
|
@@ -403,6 +403,7 @@ Use `DATAVERSE_TOOLS` to register only the tool categories your agent needs. Thi
|
|
|
403
403
|
| `security` | 12 | Security roles, teams, users, business units |
|
|
404
404
|
| `jobs` | 3 | Async operation (system job) monitoring and cancellation |
|
|
405
405
|
| `webresources` | 5 | Web resource (JS/HTML/CSS/image) CRUD — gated, not always-on |
|
|
406
|
+
| `customapis` | 13 | Custom API, request parameter, and response property management |
|
|
406
407
|
|
|
407
408
|
`core` is **always** registered even when not listed. When `DATAVERSE_TOOLS` is unset or empty, all categories register (current default behaviour). Category gating composes with `DATAVERSE_ALLOW_WRITE` and `DATAVERSE_ALLOW_DELETE`: a tool registers only when its category is enabled AND its write/delete flag (if any) is set.
|
|
408
409
|
|
|
@@ -478,7 +479,7 @@ Use `DATAVERSE_TOOLS` to register only the tool categories your agent needs. Thi
|
|
|
478
479
|
| `dataverse_get_column` | default | Get full metadata for one column, including type-specific properties |
|
|
479
480
|
| `dataverse_create_table` | write | Create a custom table (ownership type, primary name attribute) |
|
|
480
481
|
| `dataverse_update_table` | write | Update a table's display name or description |
|
|
481
|
-
| `dataverse_create_column` | write | Add a typed column to a table |
|
|
482
|
+
| `dataverse_create_column` | write | Add a typed column to a table (supports Memo, Boolean with custom labels, and Picklist/MultiSelectPicklist bound to a global choice) |
|
|
482
483
|
| `dataverse_update_column` | write | Replace a column via full PUT (fetch with `dataverse_get_column` first) |
|
|
483
484
|
| `dataverse_publish_customizations` | write | Publish schema changes via `PublishXml` (targeted) or `PublishAllXml` |
|
|
484
485
|
| `dataverse_delete_table` | delete | Permanently delete a custom table and all its data |
|
|
@@ -658,6 +659,24 @@ Use `DATAVERSE_TOOLS` to register only the tool categories your agent needs. Thi
|
|
|
658
659
|
| `dataverse_list_plugin_trace_logs` | default | List trace logs with filters (class, message, entity, operation, errors-only, time window) |
|
|
659
660
|
| `dataverse_set_plugin_trace_log_setting` | write | Set org-wide trace log verbosity (`off`, `exception`, `all`) |
|
|
660
661
|
|
|
662
|
+
### Custom APIs
|
|
663
|
+
|
|
664
|
+
| Tool | Gate | Description |
|
|
665
|
+
|------|------|-------------|
|
|
666
|
+
| `dataverse_list_custom_apis` | default | List custom APIs, optional filter and pagination |
|
|
667
|
+
| `dataverse_get_custom_api` | default | Get one custom API by GUID, including its request parameters and response properties |
|
|
668
|
+
| `dataverse_create_custom_api` | write | Create a custom API (unbound, entity-bound, or entity collection-bound) |
|
|
669
|
+
| `dataverse_update_custom_api` | write | Update mutable fields of a custom API (display name, description, visibility, allowed step types) |
|
|
670
|
+
| `dataverse_delete_custom_api` | delete | Permanently delete a custom API and its child parameters and properties |
|
|
671
|
+
| `dataverse_list_custom_api_request_parameters` | default | List request parameters for a custom API |
|
|
672
|
+
| `dataverse_create_custom_api_request_parameter` | write | Add a typed request parameter to a custom API |
|
|
673
|
+
| `dataverse_update_custom_api_request_parameter` | write | Update mutable fields of a request parameter |
|
|
674
|
+
| `dataverse_delete_custom_api_request_parameter` | delete | Delete a request parameter |
|
|
675
|
+
| `dataverse_list_custom_api_response_properties` | default | List response properties for a custom API |
|
|
676
|
+
| `dataverse_create_custom_api_response_property` | write | Add a typed response property to a custom API |
|
|
677
|
+
| `dataverse_update_custom_api_response_property` | write | Update mutable fields of a response property |
|
|
678
|
+
| `dataverse_delete_custom_api_response_property` | delete | Delete a response property |
|
|
679
|
+
|
|
661
680
|
---
|
|
662
681
|
|
|
663
682
|
## Development
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://pypi.org/project/dataverse-mcp/)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
An [MCP](https://modelcontextprotocol.io/) server that gives AI agents structured access to Microsoft Dataverse — query records, inspect metadata, manage schema, manage model-driven app forms, views, and apps, administer security roles, teams, and users, manage plug-in trace logging, and explore Power Platform environments.
|
|
7
|
+
An [MCP](https://modelcontextprotocol.io/) server that gives AI agents structured access to Microsoft Dataverse — query records, inspect metadata, manage schema, manage model-driven app forms, views, and apps, administer security roles, teams, and users, manage plug-in trace logging, manage custom APIs, and explore Power Platform environments.
|
|
8
8
|
|
|
9
9
|
Built with [FastMCP](https://github.com/modelcontextprotocol/python-sdk), `httpx`, and the Dataverse OData v4.0 Web API. Communicates over **stdio** and works with Claude, GitHub Copilot, and any MCP-compatible client.
|
|
10
10
|
|
|
@@ -344,7 +344,7 @@ A single server instance can target any Dataverse org — pass `dataverse_url` o
|
|
|
344
344
|
|
|
345
345
|
## Tools
|
|
346
346
|
|
|
347
|
-
**
|
|
347
|
+
**170 tools** grouped by domain below. Every tool returns JSON and requires `dataverse_url` on each call.
|
|
348
348
|
|
|
349
349
|
The **Gate** column shows when a tool is registered:
|
|
350
350
|
|
|
@@ -375,6 +375,7 @@ Use `DATAVERSE_TOOLS` to register only the tool categories your agent needs. Thi
|
|
|
375
375
|
| `security` | 12 | Security roles, teams, users, business units |
|
|
376
376
|
| `jobs` | 3 | Async operation (system job) monitoring and cancellation |
|
|
377
377
|
| `webresources` | 5 | Web resource (JS/HTML/CSS/image) CRUD — gated, not always-on |
|
|
378
|
+
| `customapis` | 13 | Custom API, request parameter, and response property management |
|
|
378
379
|
|
|
379
380
|
`core` is **always** registered even when not listed. When `DATAVERSE_TOOLS` is unset or empty, all categories register (current default behaviour). Category gating composes with `DATAVERSE_ALLOW_WRITE` and `DATAVERSE_ALLOW_DELETE`: a tool registers only when its category is enabled AND its write/delete flag (if any) is set.
|
|
380
381
|
|
|
@@ -450,7 +451,7 @@ Use `DATAVERSE_TOOLS` to register only the tool categories your agent needs. Thi
|
|
|
450
451
|
| `dataverse_get_column` | default | Get full metadata for one column, including type-specific properties |
|
|
451
452
|
| `dataverse_create_table` | write | Create a custom table (ownership type, primary name attribute) |
|
|
452
453
|
| `dataverse_update_table` | write | Update a table's display name or description |
|
|
453
|
-
| `dataverse_create_column` | write | Add a typed column to a table |
|
|
454
|
+
| `dataverse_create_column` | write | Add a typed column to a table (supports Memo, Boolean with custom labels, and Picklist/MultiSelectPicklist bound to a global choice) |
|
|
454
455
|
| `dataverse_update_column` | write | Replace a column via full PUT (fetch with `dataverse_get_column` first) |
|
|
455
456
|
| `dataverse_publish_customizations` | write | Publish schema changes via `PublishXml` (targeted) or `PublishAllXml` |
|
|
456
457
|
| `dataverse_delete_table` | delete | Permanently delete a custom table and all its data |
|
|
@@ -630,6 +631,24 @@ Use `DATAVERSE_TOOLS` to register only the tool categories your agent needs. Thi
|
|
|
630
631
|
| `dataverse_list_plugin_trace_logs` | default | List trace logs with filters (class, message, entity, operation, errors-only, time window) |
|
|
631
632
|
| `dataverse_set_plugin_trace_log_setting` | write | Set org-wide trace log verbosity (`off`, `exception`, `all`) |
|
|
632
633
|
|
|
634
|
+
### Custom APIs
|
|
635
|
+
|
|
636
|
+
| Tool | Gate | Description |
|
|
637
|
+
|------|------|-------------|
|
|
638
|
+
| `dataverse_list_custom_apis` | default | List custom APIs, optional filter and pagination |
|
|
639
|
+
| `dataverse_get_custom_api` | default | Get one custom API by GUID, including its request parameters and response properties |
|
|
640
|
+
| `dataverse_create_custom_api` | write | Create a custom API (unbound, entity-bound, or entity collection-bound) |
|
|
641
|
+
| `dataverse_update_custom_api` | write | Update mutable fields of a custom API (display name, description, visibility, allowed step types) |
|
|
642
|
+
| `dataverse_delete_custom_api` | delete | Permanently delete a custom API and its child parameters and properties |
|
|
643
|
+
| `dataverse_list_custom_api_request_parameters` | default | List request parameters for a custom API |
|
|
644
|
+
| `dataverse_create_custom_api_request_parameter` | write | Add a typed request parameter to a custom API |
|
|
645
|
+
| `dataverse_update_custom_api_request_parameter` | write | Update mutable fields of a request parameter |
|
|
646
|
+
| `dataverse_delete_custom_api_request_parameter` | delete | Delete a request parameter |
|
|
647
|
+
| `dataverse_list_custom_api_response_properties` | default | List response properties for a custom API |
|
|
648
|
+
| `dataverse_create_custom_api_response_property` | write | Add a typed response property to a custom API |
|
|
649
|
+
| `dataverse_update_custom_api_response_property` | write | Update mutable fields of a response property |
|
|
650
|
+
| `dataverse_delete_custom_api_response_property` | delete | Delete a response property |
|
|
651
|
+
|
|
633
652
|
---
|
|
634
653
|
|
|
635
654
|
## Development
|
|
@@ -32,6 +32,7 @@ _ALLOW_DELETE = os.environ.get("DATAVERSE_ALLOW_DELETE", "").lower() == "true"
|
|
|
32
32
|
_KNOWN_CATEGORIES = frozenset({
|
|
33
33
|
"core", "schema", "solutions", "flows", "forms", "views", "apps",
|
|
34
34
|
"connections", "variables", "plugins", "security", "jobs", "webresources",
|
|
35
|
+
"customapis",
|
|
35
36
|
})
|
|
36
37
|
|
|
37
38
|
_raw_tools_env = os.environ.get("DATAVERSE_TOOLS", "").strip()
|