objectstore-mcp 2.3.2__tar.gz → 2.3.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.
Files changed (70) hide show
  1. {objectstore_mcp-2.3.2/objectstore_mcp.egg-info → objectstore_mcp-2.3.4}/PKG-INFO +4 -4
  2. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/README.md +1 -1
  3. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/__init__.py +1 -1
  4. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/api_client.py +1 -1
  5. objectstore_mcp-2.3.4/objectstore_mcp/connector_sources.py +117 -0
  6. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/mcp_server.py +1 -1
  7. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/ontology/certification.json +0 -3
  8. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/ontology/objectstore.ttl +1 -2
  9. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4/objectstore_mcp.egg-info}/PKG-INFO +4 -4
  10. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp.egg-info/SOURCES.txt +2 -2
  11. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp.egg-info/entry_points.txt +3 -3
  12. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp.egg-info/requires.txt +2 -2
  13. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/pyproject.toml +6 -5
  14. objectstore_mcp-2.3.4/requirements.txt +2 -0
  15. objectstore_mcp-2.3.4/tests/test_default_content_surfaces.py +43 -0
  16. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_kg_ingest.py +8 -8
  17. objectstore_mcp-2.3.2/objectstore_mcp/connectors/mcp_source_presets.json +0 -17
  18. objectstore_mcp-2.3.2/objectstore_mcp/connectors/tool_schema_fingerprints.json +0 -8
  19. objectstore_mcp-2.3.2/requirements.txt +0 -2
  20. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/LICENSE +0 -0
  21. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/MANIFEST.in +0 -0
  22. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/__main__.py +0 -0
  23. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/api/__init__.py +0 -0
  24. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/api/api_client_azure_blob.py +0 -0
  25. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/api/api_client_base.py +0 -0
  26. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/api/api_client_filesystem.py +0 -0
  27. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/api/api_client_gcs.py +0 -0
  28. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/api/api_client_s3.py +0 -0
  29. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/auth.py +0 -0
  30. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/config.py +0 -0
  31. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/connectors/__init__.py +0 -0
  32. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/kg_ingest.py +0 -0
  33. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/mcp/__init__.py +0 -0
  34. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/mcp/mcp_objectstore.py +0 -0
  35. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/mcp_config.json +0 -0
  36. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/objectstore_input_models.py +0 -0
  37. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/objectstore_response_models.py +0 -0
  38. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/ontology/__init__.py +0 -0
  39. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/ontology/fixtures/records.json +0 -0
  40. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/ontology/mappings/source.yaml +0 -0
  41. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/ontology/migrations/manifest.json +0 -0
  42. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/ontology/shapes/connector.shacl.ttl +0 -0
  43. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/prompts/__init__.py +0 -0
  44. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/__init__.py +0 -0
  45. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-bucket-administration/SKILL.md +0 -0
  46. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-bucket-administration/WORKFLOW.md +0 -0
  47. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-data-transfer/SKILL.md +0 -0
  48. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-data-transfer/WORKFLOW.md +0 -0
  49. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-mcp-operations/SKILL.md +0 -0
  50. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-mcp-operations/agents/openai.yaml +0 -0
  51. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-mcp-operations/references/catalog.md +0 -0
  52. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-object-operations/SKILL.md +0 -0
  53. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp/skills/objectstore-object-operations/WORKFLOW.md +0 -0
  54. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp.egg-info/dependency_links.txt +0 -0
  55. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/objectstore_mcp.egg-info/top_level.txt +0 -0
  56. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/setup.cfg +0 -0
  57. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_api_wrapper.py +0 -0
  58. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_auth.py +0 -0
  59. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_azure_backend.py +0 -0
  60. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_backend_conformance.py +0 -0
  61. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_config.py +0 -0
  62. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_gcs_backend.py +0 -0
  63. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_identity_context_scoping.py +0 -0
  64. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_init_dynamics.py +0 -0
  65. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_objectstore_mcp_validation.py +0 -0
  66. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_optional_dependencies.py +0 -0
  67. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_s3_backend.py +0 -0
  68. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_s3_moto.py +0 -0
  69. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_safety.py +0 -0
  70. {objectstore_mcp-2.3.2 → objectstore_mcp-2.3.4}/tests/test_startup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: objectstore-mcp
3
- Version: 2.3.2
3
+ Version: 2.3.4
4
4
  Summary: Object storage (S3/MinIO/R2, Google Cloud Storage, Azure Blob, local filesystem) API + MCP Server for Agentic AI!
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,10 +12,10 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
16
16
  Requires-Dist: python-dotenv>=1.2.4
17
17
  Provides-Extra: mcp
18
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5; extra == "mcp"
18
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
19
19
  Provides-Extra: s3
20
20
  Requires-Dist: boto3>=1.43.114; extra == "s3"
21
21
  Provides-Extra: gcs
@@ -43,7 +43,7 @@ The object-storage connector for the agent-connector-sdk fleet: **one MCP tool
43
43
  surface over S3 and S3-compatible stores (MinIO, Cloudflare R2), Google Cloud
44
44
  Storage, Azure Blob Storage, and a zero-infra local-filesystem backend**.
45
45
 
46
- *Version: 2.3.2*
46
+ *Version: 2.3.4*
47
47
 
48
48
  > **Documentation** — Installation, deployment, and usage across the API, CLI, and
49
49
  > MCP interfaces are maintained in [`docs/`](docs/index.md).
@@ -9,7 +9,7 @@ The object-storage connector for the agent-connector-sdk fleet: **one MCP tool
9
9
  surface over S3 and S3-compatible stores (MinIO, Cloudflare R2), Google Cloud
10
10
  Storage, Azure Blob Storage, and a zero-infra local-filesystem backend**.
11
11
 
12
- *Version: 2.3.2*
12
+ *Version: 2.3.4*
13
13
 
14
14
  > **Documentation** — Installation, deployment, and usage across the API, CLI, and
15
15
  > MCP interfaces are maintained in [`docs/`](docs/index.md).
@@ -9,7 +9,7 @@ import importlib
9
9
  import inspect
10
10
  from typing import Any
11
11
 
12
- __version__ = "2.3.2"
12
+ __version__ = "2.3.4"
13
13
  __all__: list[str] = []
14
14
 
15
15
  CORE_MODULES = ["objectstore_mcp.api_client"]
@@ -17,7 +17,7 @@ from objectstore_mcp.api import (
17
17
  create_backend,
18
18
  )
19
19
 
20
- __version__ = "2.3.2"
20
+ __version__ = "2.3.4"
21
21
 
22
22
  __all__ = [
23
23
  "BACKEND_ALIASES",
@@ -0,0 +1,117 @@
1
+ """Data sources of this connector, declared by tool name (generated by connector-ontology-map migrate).
2
+
3
+ Served live as ``connector://resources``. Regenerate by editing the declarations, not the tools.
4
+ """
5
+
6
+ # ruff: noqa: E501
7
+ from __future__ import annotations
8
+
9
+ from typing import Any
10
+
11
+ from agent_connector_sdk.ingest.live_declaration import source_meta
12
+ from agent_connector_sdk.ingest.sources import IngestSourceDeclaration, IngestSourceSpec
13
+
14
+ CONNECTOR: str = "objectstore-mcp"
15
+
16
+ SOURCES: tuple[Any, ...] = (
17
+ source_meta(
18
+ tool="objectstore_list_objects",
19
+ source_id="objectstore-objects",
20
+ record_type="Object",
21
+ id_field="key",
22
+ cursor_field="last_modified",
23
+ preset={
24
+ "doc_type": "objectstore_object",
25
+ "params": {
26
+ "action": "list",
27
+ },
28
+ },
29
+ records_path="objects",
30
+ server="objectstore-mcp",
31
+ text_field="content_type",
32
+ title_field="key",
33
+ ),
34
+ )
35
+
36
+ SCHEMA_MAPPINGS: dict[str, Any] = {
37
+ "Bucket": {
38
+ "fields": {
39
+ "backendType": "xsd:string",
40
+ "byteSize": "xsd:integer",
41
+ "contentType": "xsd:string",
42
+ "endpoint": "xsd:string",
43
+ "etag": "xsd:string",
44
+ "lastModified": "xsd:string",
45
+ "location": "xsd:string",
46
+ "objectKey": "xsd:string",
47
+ "storageClass": "xsd:string",
48
+ },
49
+ "ontology_class": None,
50
+ },
51
+ "Object": {
52
+ "fields": {
53
+ "backendType": "xsd:string",
54
+ "byteSize": "xsd:integer",
55
+ "contentType": "xsd:string",
56
+ "endpoint": "xsd:string",
57
+ "etag": "xsd:string",
58
+ "lastModified": "xsd:string",
59
+ "location": "xsd:string",
60
+ "objectKey": "xsd:string",
61
+ "storageClass": "xsd:string",
62
+ },
63
+ "ontology_class": None,
64
+ },
65
+ "ObjectStore": {
66
+ "fields": {
67
+ "backendType": "xsd:string",
68
+ "byteSize": "xsd:integer",
69
+ "contentType": "xsd:string",
70
+ "endpoint": "xsd:string",
71
+ "etag": "xsd:string",
72
+ "lastModified": "xsd:string",
73
+ "location": "xsd:string",
74
+ "objectKey": "xsd:string",
75
+ "storageClass": "xsd:string",
76
+ },
77
+ "ontology_class": None,
78
+ },
79
+ }
80
+
81
+ RESOURCES: tuple[dict[str, str], ...] = (
82
+ {
83
+ "id_prefix": "bucket",
84
+ "label": "Bucket",
85
+ "name": "Bucket",
86
+ },
87
+ {
88
+ "id_prefix": "object",
89
+ "label": "Object",
90
+ "name": "Object",
91
+ },
92
+ {
93
+ "id_prefix": "objectstore",
94
+ "label": "Object Store",
95
+ "name": "ObjectStore",
96
+ },
97
+ )
98
+
99
+
100
+ def declaration() -> IngestSourceDeclaration:
101
+ """The declaration the server assembles from this module."""
102
+ specs: list[IngestSourceSpec] = []
103
+ for item in SOURCES:
104
+ for entry in item["connector_sources"]:
105
+ body: dict[str, Any] = {
106
+ k: v for k, v in entry.items() if k not in ("tool", "mapping")
107
+ }
108
+ spec = {**body, "tools": (entry["tool"],)}
109
+ specs.append(IngestSourceSpec.model_validate(spec))
110
+ return IngestSourceDeclaration.model_validate(
111
+ {
112
+ "connector": CONNECTOR,
113
+ "sources": specs,
114
+ "schema_mappings": SCHEMA_MAPPINGS,
115
+ "resources": RESOURCES,
116
+ }
117
+ )
@@ -14,7 +14,7 @@ from objectstore_mcp.api import ObjectStoreBackend
14
14
  from objectstore_mcp.auth import get_client
15
15
  from objectstore_mcp.mcp.mcp_objectstore import register_objectstore_tools # noqa: F401
16
16
 
17
- __version__ = "2.3.2"
17
+ __version__ = "2.3.4"
18
18
 
19
19
  logger = get_logger(name="objectstore_mcp")
20
20
 
@@ -1,9 +1,6 @@
1
1
  {
2
2
  "api_version": "arbora.io/v1",
3
3
  "artifacts": {
4
- "connector_manifest.yml": "21fb15da72aaba6a8e6185d1e69b6d6d4be4e5c4d3601831cf0cd5806b35c990",
5
- "objectstore_mcp/connectors/mcp_source_presets.json": "a5d7d72e0755cada67620f12e51a35f5804ea441c0b59345e2c8e62ea2fd2629",
6
- "objectstore_mcp/connectors/tool_schema_fingerprints.json": "8170c11d157b2222c1fe170a3d9b604cfc2bbe38f6282e5b794df6ca4f2e246e",
7
4
  "objectstore_mcp/ontology/fixtures/records.json": "69317390a26787a4f4ad96fc0113346ddacd85ec74b80b307ae903fc985badb1",
8
5
  "objectstore_mcp/ontology/mappings/source.yaml": "5ad0b30b461534c509ba23a18b8e5a5b49de22891d6bd9e30df7b6d46c0e26cf",
9
6
  "objectstore_mcp/ontology/migrations/manifest.json": "2a2f97d2d28fcf0de059d5dafd9f1edf161d38517b7fccb6ed73b6dd80656067",
@@ -115,5 +115,4 @@
115
115
  objects they hold with their size/etag/content-type/storage-class metadata — across
116
116
  S3/MinIO/R2, Google Cloud Storage, Azure Blob, and a local filesystem backend,
117
117
  federated into the agent-connector-sdk knowledge-graph hub. Captures object METADATA
118
- only; object bytes stay in the backing store (or a separately-linked :Blob).""" ;
119
- owl:imports <http://knuckles.team/kg> .
118
+ only; object bytes stay in the backing store (or a separately-linked :Blob).""" .
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: objectstore-mcp
3
- Version: 2.3.2
3
+ Version: 2.3.4
4
4
  Summary: Object storage (S3/MinIO/R2, Google Cloud Storage, Azure Blob, local filesystem) API + MCP Server for Agentic AI!
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,10 +12,10 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
16
16
  Requires-Dist: python-dotenv>=1.2.4
17
17
  Provides-Extra: mcp
18
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5; extra == "mcp"
18
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
19
19
  Provides-Extra: s3
20
20
  Requires-Dist: boto3>=1.43.114; extra == "s3"
21
21
  Provides-Extra: gcs
@@ -43,7 +43,7 @@ The object-storage connector for the agent-connector-sdk fleet: **one MCP tool
43
43
  surface over S3 and S3-compatible stores (MinIO, Cloudflare R2), Google Cloud
44
44
  Storage, Azure Blob Storage, and a zero-infra local-filesystem backend**.
45
45
 
46
- *Version: 2.3.2*
46
+ *Version: 2.3.4*
47
47
 
48
48
  > **Documentation** — Installation, deployment, and usage across the API, CLI, and
49
49
  > MCP interfaces are maintained in [`docs/`](docs/index.md).
@@ -8,6 +8,7 @@ objectstore_mcp/__main__.py
8
8
  objectstore_mcp/api_client.py
9
9
  objectstore_mcp/auth.py
10
10
  objectstore_mcp/config.py
11
+ objectstore_mcp/connector_sources.py
11
12
  objectstore_mcp/kg_ingest.py
12
13
  objectstore_mcp/mcp_config.json
13
14
  objectstore_mcp/mcp_server.py
@@ -26,8 +27,6 @@ objectstore_mcp/api/api_client_filesystem.py
26
27
  objectstore_mcp/api/api_client_gcs.py
27
28
  objectstore_mcp/api/api_client_s3.py
28
29
  objectstore_mcp/connectors/__init__.py
29
- objectstore_mcp/connectors/mcp_source_presets.json
30
- objectstore_mcp/connectors/tool_schema_fingerprints.json
31
30
  objectstore_mcp/mcp/__init__.py
32
31
  objectstore_mcp/mcp/mcp_objectstore.py
33
32
  objectstore_mcp/ontology/__init__.py
@@ -53,6 +52,7 @@ tests/test_auth.py
53
52
  tests/test_azure_backend.py
54
53
  tests/test_backend_conformance.py
55
54
  tests/test_config.py
55
+ tests/test_default_content_surfaces.py
56
56
  tests/test_gcs_backend.py
57
57
  tests/test_identity_context_scoping.py
58
58
  tests/test_init_dynamics.py
@@ -1,11 +1,11 @@
1
+ [agent_connector_sdk.connector]
2
+ objectstore-mcp = objectstore_mcp
3
+
1
4
  [agent_connector_sdk.ontology_providers]
2
5
  objectstore-mcp = objectstore_mcp.ontology
3
6
 
4
7
  [agent_connector_sdk.skill_providers]
5
8
  objectstore-mcp = objectstore_mcp.skills
6
9
 
7
- [agent_connector_sdk.source_connector_providers]
8
- objectstore-mcp = objectstore_mcp.connectors
9
-
10
10
  [console_scripts]
11
11
  objectstore-mcp = objectstore_mcp.mcp_server:mcp_server
@@ -1,4 +1,4 @@
1
- agent-connector-sdk[mcp]<1.0.0,>=0.3.5
1
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.1
2
2
  python-dotenv>=1.2.4
3
3
 
4
4
  [all]
@@ -11,7 +11,7 @@ azure-storage-blob>=12.31.0
11
11
  google-cloud-storage>=3.17.1
12
12
 
13
13
  [mcp]
14
- agent-connector-sdk[mcp]<1.0.0,>=0.3.5
14
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.1
15
15
 
16
16
  [s3]
17
17
  boto3>=1.43.114
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "objectstore-mcp"
7
- version = "2.3.2"
7
+ version = "2.3.4"
8
8
  description = "Object storage (S3/MinIO/R2, Google Cloud Storage, Azure Blob, local filesystem) API + MCP Server for Agentic AI!"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.12"
12
- dependencies = [ "agent-connector-sdk[mcp]>=0.3.5,<1.0.0", "python-dotenv>=1.2.4",]
12
+ dependencies = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0", "python-dotenv>=1.2.4",]
13
13
  [[project.authors]]
14
14
  name = "Project Maintainers"
15
15
  email = "maintainers@users.noreply.github.com"
@@ -18,7 +18,7 @@ email = "maintainers@users.noreply.github.com"
18
18
  text = "MIT"
19
19
 
20
20
  [project.optional-dependencies]
21
- mcp = [ "agent-connector-sdk[mcp]>=0.3.5,<1.0.0",]
21
+ mcp = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0",]
22
22
  s3 = [
23
23
  # CONCEPT:PHASE2-RECONCILE — relaxed off the modernize-bump's 1.43.52
24
24
  # floor: lighteval (pulled in via data-science-mcp[eval]) transitively
@@ -40,8 +40,9 @@ objectstore-mcp = "objectstore_mcp.skills"
40
40
  [project.entry-points."agent_connector_sdk.ontology_providers"]
41
41
  objectstore-mcp = "objectstore_mcp.ontology"
42
42
 
43
- [project.entry-points."agent_connector_sdk.source_connector_providers"]
44
- objectstore-mcp = "objectstore_mcp.connectors"
43
+ # The one declared connector identity: the fleet name (SDK-CONNECTOR-CONTROL-R071).
44
+ [project.entry-points."agent_connector_sdk.connector"]
45
+ objectstore-mcp = "objectstore_mcp"
45
46
 
46
47
  [tool.uv.workspace]
47
48
  members = ["."]
@@ -0,0 +1,2 @@
1
+ agent-connector-sdk[mcp]>=0.4.1,<1.0.0
2
+ python-dotenv>=1.0.0
@@ -0,0 +1,43 @@
1
+ """CONN-OBJECTSTORE-MCP-CONNECTOR-CONTENT-R001: the server lists its packaged skills, ontology and prompts by default."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import importlib
7
+ from pathlib import Path
8
+
9
+ import pytest
10
+ from fastmcp import Client
11
+
12
+ PACKAGE = "objectstore_mcp"
13
+ ROOT = Path(list(importlib.import_module(PACKAGE).__path__)[0])
14
+
15
+ pytestmark = pytest.mark.spec("CONN-OBJECTSTORE-MCP-CONNECTOR-CONTENT-R001")
16
+
17
+
18
+ def _server():
19
+ namespace = {"__name__": PACKAGE + ".mcp_server"}
20
+ exec(
21
+ "from agent_connector_sdk.mcp.server import create_mcp_server\n"
22
+ "result = create_mcp_server('objectstore-mcp', version='0', command_args=[])",
23
+ namespace,
24
+ )
25
+ return namespace["result"][1]
26
+
27
+
28
+ async def _listings():
29
+ async with Client(_server()) as client:
30
+ resources = {str(r.uri) for r in await client.list_resources()}
31
+ prompts = {p.name for p in await client.list_prompts()}
32
+ return resources, prompts
33
+
34
+
35
+ def test_default_content_surfaces() -> None:
36
+ resources, prompts = asyncio.run(_listings())
37
+ if list(ROOT.glob("skills/*/SKILL.md")):
38
+ assert any(u.startswith("skill://") for u in resources)
39
+ if list(ROOT.glob("ontology/*.ttl")):
40
+ assert any(u.startswith("ontology://objectstore-mcp/") for u in resources)
41
+ for path in ROOT.glob("prompts/*.json"):
42
+ if not path.name.startswith("_"):
43
+ assert path.stem in prompts
@@ -61,12 +61,12 @@ async def test_ingest_entities_writes_nodes_and_edges(ingest):
61
61
  request = transport.requests[0]
62
62
  assert {r.record_id for r in request.records} == {"a", "s"}
63
63
  bucket_record = next(r for r in request.records if r.record_id == "a")
64
- assert bucket_record.mapping_reference.endswith("schema_mappings/Bucket")
64
+ assert bucket_record.mapping_reference.endswith("mappings/Bucket")
65
65
  assert bucket_record.payload["name"] == "b"
66
66
  rel = request.relationships[0]
67
67
  assert rel.source.record_id == "a"
68
68
  assert rel.target.record_id == "s"
69
- assert rel.relation_reference.endswith("/relations/inStore")
69
+ assert rel.relation_reference.endswith("/inStore")
70
70
 
71
71
 
72
72
  @pytest.mark.asyncio
@@ -87,10 +87,10 @@ async def test_ingest_buckets_maps_bucket_and_store(ingest):
87
87
  request = transport.requests[0]
88
88
  records = {r.record_id: r for r in request.records}
89
89
  store_record = records["objectstore:store:minio"]
90
- assert store_record.mapping_reference.endswith("schema_mappings/ObjectStore")
90
+ assert store_record.mapping_reference.endswith("mappings/ObjectStore")
91
91
  assert store_record.payload["backendType"] == "s3"
92
92
  bucket_record = records["objectstore:bucket:minio/media-prod"]
93
- assert bucket_record.mapping_reference.endswith("schema_mappings/Bucket")
93
+ assert bucket_record.mapping_reference.endswith("mappings/Bucket")
94
94
  assert bucket_record.payload["location"] == "us"
95
95
  assert bucket_record.payload["externalToolId"] == "minio/media-prod"
96
96
  assert (
@@ -98,7 +98,7 @@ async def test_ingest_buckets_maps_bucket_and_store(ingest):
98
98
  "objectstore:store:minio",
99
99
  ) in {(r.source.record_id, r.target.record_id) for r in request.relationships}
100
100
  assert all(
101
- r.relation_reference.endswith("/relations/inStore")
101
+ r.relation_reference.endswith("/inStore")
102
102
  for r in request.relationships
103
103
  )
104
104
 
@@ -126,19 +126,19 @@ async def test_ingest_objects_maps_object_and_bucket(ingest):
126
126
  request = transport.requests[0]
127
127
  records = {r.record_id: r for r in request.records}
128
128
  obj = records["objectstore:object:local/scratch/logs/app.log"]
129
- assert obj.mapping_reference.endswith("schema_mappings/Object")
129
+ assert obj.mapping_reference.endswith("mappings/Object")
130
130
  assert obj.payload["objectKey"] == "logs/app.log"
131
131
  assert obj.payload["byteSize"] == 1234
132
132
  assert obj.payload["contentType"] == "text/plain"
133
133
  assert obj.payload["storageClass"] == "STANDARD"
134
134
  assert records["objectstore:bucket:local/scratch"].mapping_reference.endswith(
135
- "schema_mappings/Bucket"
135
+ "mappings/Bucket"
136
136
  )
137
137
  assert len(request.relationships) == 1
138
138
  rel = request.relationships[0]
139
139
  assert rel.source.record_id == "objectstore:object:local/scratch/logs/app.log"
140
140
  assert rel.target.record_id == "objectstore:bucket:local/scratch"
141
- assert rel.relation_reference.endswith("/relations/inBucket")
141
+ assert rel.relation_reference.endswith("/inBucket")
142
142
 
143
143
 
144
144
  @pytest.mark.asyncio
@@ -1,17 +0,0 @@
1
- {
2
- "_comment": "Tier-1 mcp_tool source preset(s) for objectstore-mcp (AU-KG.ingest.mcp-tool-connector). The action-routed 'objects' tool lists objects under a bucket/prefix; each record is an object metadata envelope (key/size/etag/content_type/last_modified). Contributed presets win over the central MCP_TOOL_PRESETS. For richer typed :Bucket/:Object ingestion prefer the native 'objectstore_ingest' tool + objectstore_mcp.kg_ingest.",
3
- "objectstore-objects": {
4
- "server": "objectstore-mcp",
5
- "tool": "objects",
6
- "action": "list",
7
- "params": {
8
- "action": "list"
9
- },
10
- "records_path": "objects",
11
- "id_field": "key",
12
- "title_field": "key",
13
- "text_field": "content_type",
14
- "updated_field": "last_modified",
15
- "doc_type": "objectstore_object"
16
- }
17
- }
@@ -1,8 +0,0 @@
1
- {
2
- "algorithm": "agent-connector-sdk:mcp-tool-schema-compat:v1",
3
- "connector": "objectstore-mcp",
4
- "schema_version": "1",
5
- "tools": {
6
- "objects": ""
7
- }
8
- }
@@ -1,2 +0,0 @@
1
- agent-connector-sdk[mcp]>=0.2.1,<1.0.0
2
- python-dotenv>=1.0.0
File without changes