dockerhub-api 1.3.3__tar.gz → 1.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 (89) hide show
  1. {dockerhub_api-1.3.3/dockerhub_api.egg-info → dockerhub_api-1.3.4}/PKG-INFO +4 -4
  2. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/README.md +1 -1
  3. dockerhub_api-1.3.4/dockerhub_api/connector_sources.py +192 -0
  4. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp_server.py +1 -1
  5. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/ontology/certification.json +0 -3
  6. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/ontology/dockerhub.ttl +13 -15
  7. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4/dockerhub_api.egg-info}/PKG-INFO +4 -4
  8. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api.egg-info/SOURCES.txt +1 -2
  9. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api.egg-info/entry_points.txt +0 -3
  10. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api.egg-info/requires.txt +2 -2
  11. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/pyproject.toml +3 -6
  12. dockerhub_api-1.3.4/requirements.txt +3 -0
  13. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_fleet_name.py +2 -13
  14. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_kg_ingest.py +1 -1
  15. dockerhub_api-1.3.3/dockerhub_api/connectors/mcp_source_presets.json +0 -18
  16. dockerhub_api-1.3.3/dockerhub_api/connectors/tool_schema_fingerprints.json +0 -8
  17. dockerhub_api-1.3.3/requirements.txt +0 -3
  18. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/LICENSE +0 -0
  19. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/MANIFEST.in +0 -0
  20. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/__init__.py +0 -0
  21. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/__main__.py +0 -0
  22. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/__init__.py +0 -0
  23. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_access_tokens.py +0 -0
  24. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_audit_logs.py +0 -0
  25. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_auth.py +0 -0
  26. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_base.py +0 -0
  27. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_groups.py +0 -0
  28. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_org_access_tokens.py +0 -0
  29. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_orgs.py +0 -0
  30. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_registry.py +0 -0
  31. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_registry_base.py +0 -0
  32. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_repositories.py +0 -0
  33. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_scim.py +0 -0
  34. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api/api_client_scout.py +0 -0
  35. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/api_client.py +0 -0
  36. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/auth.py +0 -0
  37. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/connectors/__init__.py +0 -0
  38. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/dockerhub_input_models.py +0 -0
  39. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/dockerhub_response_models.py +0 -0
  40. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/kg_ingest.py +0 -0
  41. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/__init__.py +0 -0
  42. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_admin.py +0 -0
  43. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_audit.py +0 -0
  44. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_auth.py +0 -0
  45. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_kg.py +0 -0
  46. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_org.py +0 -0
  47. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_registry.py +0 -0
  48. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_repos.py +0 -0
  49. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_scim.py +0 -0
  50. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_scout.py +0 -0
  51. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp/mcp_teams.py +0 -0
  52. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/mcp_config.json +0 -0
  53. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/ontology/__init__.py +0 -0
  54. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/ontology/fixtures/records.json +0 -0
  55. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/ontology/mappings/source.yaml +0 -0
  56. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/ontology/migrations/manifest.json +0 -0
  57. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/ontology/shapes/connector.shacl.ttl +0 -0
  58. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/prompts/__init__.py +0 -0
  59. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/__init__.py +0 -0
  60. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-api-operations/SKILL.md +0 -0
  61. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-api-operations/agents/openai.yaml +0 -0
  62. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-api-operations/references/catalog.md +0 -0
  63. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-image-registry-scout/SKILL.md +0 -0
  64. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-image-registry-scout/WORKFLOW.md +0 -0
  65. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-org-administration/SKILL.md +0 -0
  66. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-org-administration/WORKFLOW.md +0 -0
  67. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-repository-management/SKILL.md +0 -0
  68. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api/skills/dockerhub-repository-management/WORKFLOW.md +0 -0
  69. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api.egg-info/dependency_links.txt +0 -0
  70. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/dockerhub_api.egg-info/top_level.txt +0 -0
  71. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/setup.cfg +0 -0
  72. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_audit.py +0 -0
  73. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_org.py +0 -0
  74. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_registry.py +0 -0
  75. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_repositories.py +0 -0
  76. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_scim.py +0 -0
  77. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_scout.py +0 -0
  78. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_teams.py +0 -0
  79. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_tokens.py +0 -0
  80. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_api_wrapper.py +0 -0
  81. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_auth.py +0 -0
  82. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_default_content_surfaces.py +0 -0
  83. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_dockerhub_a2a_validation.py +0 -0
  84. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_dockerhub_mcp_validation.py +0 -0
  85. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_identity_namespace_scoping.py +0 -0
  86. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_init_dynamics.py +0 -0
  87. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_models.py +0 -0
  88. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_rate_limit.py +0 -0
  89. {dockerhub_api-1.3.3 → dockerhub_api-1.3.4}/tests/test_startup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dockerhub-api
3
- Version: 1.3.3
3
+ Version: 1.3.4
4
4
  Summary: Docker Hub API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,11 +12,11 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=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.18
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
16
16
  Requires-Dist: httpx>=0.28.1
17
17
  Requires-Dist: python-dotenv>=1.2.4
18
18
  Provides-Extra: mcp
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
20
20
  Provides-Extra: all
21
21
  Requires-Dist: dockerhub-api[mcp]>=1.0.1; extra == "all"
22
22
  Provides-Extra: test
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/dockerhub-api)
42
42
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/dockerhub-api)
43
43
 
44
- *Version: 1.3.3*
44
+ *Version: 1.3.4*
45
45
 
46
46
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
47
47
  > Docker Hub platform are maintained in [docs/](docs/index.md).
@@ -13,7 +13,7 @@
13
13
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/dockerhub-api)
14
14
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/dockerhub-api)
15
15
 
16
- *Version: 1.3.3*
16
+ *Version: 1.3.4*
17
17
 
18
18
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
19
19
  > Docker Hub platform are maintained in [docs/](docs/index.md).
@@ -0,0 +1,192 @@
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 agent_connector_sdk.ingest.live_declaration import source_meta
10
+ from agent_connector_sdk.ingest.sources import IngestSourceDeclaration, IngestSourceSpec
11
+
12
+ CONNECTOR = "dockerhub-mcp"
13
+
14
+ SOURCES = (
15
+ source_meta(
16
+ tool="dockerhub_get_repositories",
17
+ source_id="dockerhub-repositories",
18
+ record_type="Repository",
19
+ id_field="name",
20
+ cursor_field="last_updated",
21
+ page_param="page",
22
+ page_size_param="page_size",
23
+ pagination="page",
24
+ preset={
25
+ "doc_type": "repository",
26
+ "page_kind": "number",
27
+ "params_style": "args",
28
+ },
29
+ records_path="data.results",
30
+ server="dockerhub-mcp",
31
+ text_field="description",
32
+ title_field="name",
33
+ ),
34
+ )
35
+
36
+ SCHEMA_MAPPINGS = {
37
+ "AccessToken": {
38
+ "fields": {
39
+ "architecture": "xsd:string",
40
+ "digest": "xsd:string",
41
+ "imageSize": "xsd:integer",
42
+ "isPrivate": "xsd:boolean",
43
+ "lastPushed": "xsd:string",
44
+ "permission": "xsd:string",
45
+ "pullCount": "xsd:integer",
46
+ "scopes": "xsd:string",
47
+ "starCount": "xsd:integer",
48
+ },
49
+ "ontology_class": None,
50
+ },
51
+ "ContainerImage": {
52
+ "fields": {
53
+ "architecture": "xsd:string",
54
+ "digest": "xsd:string",
55
+ "imageSize": "xsd:integer",
56
+ "isPrivate": "xsd:boolean",
57
+ "lastPushed": "xsd:string",
58
+ "permission": "xsd:string",
59
+ "pullCount": "xsd:integer",
60
+ "scopes": "xsd:string",
61
+ "starCount": "xsd:integer",
62
+ },
63
+ "ontology_class": None,
64
+ },
65
+ "Namespace": {
66
+ "fields": {
67
+ "architecture": "xsd:string",
68
+ "digest": "xsd:string",
69
+ "imageSize": "xsd:integer",
70
+ "isPrivate": "xsd:boolean",
71
+ "lastPushed": "xsd:string",
72
+ "permission": "xsd:string",
73
+ "pullCount": "xsd:integer",
74
+ "scopes": "xsd:string",
75
+ "starCount": "xsd:integer",
76
+ },
77
+ "ontology_class": None,
78
+ },
79
+ "Organization": {
80
+ "fields": {
81
+ "architecture": "xsd:string",
82
+ "digest": "xsd:string",
83
+ "imageSize": "xsd:integer",
84
+ "isPrivate": "xsd:boolean",
85
+ "lastPushed": "xsd:string",
86
+ "permission": "xsd:string",
87
+ "pullCount": "xsd:integer",
88
+ "scopes": "xsd:string",
89
+ "starCount": "xsd:integer",
90
+ },
91
+ "ontology_class": "Namespace",
92
+ },
93
+ "Repository": {
94
+ "fields": {
95
+ "architecture": "xsd:string",
96
+ "digest": "xsd:string",
97
+ "imageSize": "xsd:integer",
98
+ "isPrivate": "xsd:boolean",
99
+ "lastPushed": "xsd:string",
100
+ "permission": "xsd:string",
101
+ "pullCount": "xsd:integer",
102
+ "scopes": "xsd:string",
103
+ "starCount": "xsd:integer",
104
+ },
105
+ "ontology_class": "SoftwareProject",
106
+ },
107
+ "Team": {
108
+ "fields": {
109
+ "architecture": "xsd:string",
110
+ "digest": "xsd:string",
111
+ "imageSize": "xsd:integer",
112
+ "isPrivate": "xsd:boolean",
113
+ "lastPushed": "xsd:string",
114
+ "permission": "xsd:string",
115
+ "pullCount": "xsd:integer",
116
+ "scopes": "xsd:string",
117
+ "starCount": "xsd:integer",
118
+ },
119
+ "ontology_class": "Team",
120
+ },
121
+ "Vulnerability": {
122
+ "fields": {
123
+ "architecture": "xsd:string",
124
+ "digest": "xsd:string",
125
+ "imageSize": "xsd:integer",
126
+ "isPrivate": "xsd:boolean",
127
+ "lastPushed": "xsd:string",
128
+ "permission": "xsd:string",
129
+ "pullCount": "xsd:integer",
130
+ "scopes": "xsd:string",
131
+ "starCount": "xsd:integer",
132
+ },
133
+ "ontology_class": None,
134
+ },
135
+ }
136
+
137
+ RESOURCES = (
138
+ {
139
+ "id_prefix": "accesstoken",
140
+ "label": "Access Token",
141
+ "name": "AccessToken",
142
+ },
143
+ {
144
+ "id_prefix": "containerimage",
145
+ "label": "Container Image",
146
+ "name": "ContainerImage",
147
+ },
148
+ {
149
+ "id_prefix": "namespace",
150
+ "label": "Docker Hub Namespace",
151
+ "name": "Namespace",
152
+ },
153
+ {
154
+ "id_prefix": "organization",
155
+ "label": "Docker Hub Organization",
156
+ "name": "Organization",
157
+ },
158
+ {
159
+ "id_prefix": "repository",
160
+ "label": "Container Repository",
161
+ "name": "Repository",
162
+ },
163
+ {
164
+ "id_prefix": "team",
165
+ "label": "Team",
166
+ "name": "Team",
167
+ },
168
+ {
169
+ "id_prefix": "vulnerability",
170
+ "label": "Vulnerability",
171
+ "name": "Vulnerability",
172
+ },
173
+ )
174
+
175
+
176
+ def declaration() -> IngestSourceDeclaration:
177
+ """The declaration the server assembles from this module."""
178
+ specs = []
179
+ for item in SOURCES:
180
+ for entry in item["connector_sources"]:
181
+ body = {k: v for k, v in entry.items() if k not in ("tool", "mapping")}
182
+ specs.append(
183
+ IngestSourceSpec.model_validate({**body, "tools": (entry["tool"],)})
184
+ )
185
+ return IngestSourceDeclaration.model_validate(
186
+ {
187
+ "connector": CONNECTOR,
188
+ "sources": specs,
189
+ "schema_mappings": SCHEMA_MAPPINGS,
190
+ "resources": RESOURCES,
191
+ }
192
+ )
@@ -45,7 +45,7 @@ from dockerhub_api.mcp import (
45
45
  register_teams_tools, # noqa: F401
46
46
  )
47
47
 
48
- __version__ = "1.3.3"
48
+ __version__ = "1.3.4"
49
49
  print(f"Docker Hub MCP v{__version__}", file=sys.stderr)
50
50
 
51
51
  logger = get_logger(name="mcp_server")
@@ -1,9 +1,6 @@
1
1
  {
2
2
  "api_version": "arbora.io/v1",
3
3
  "artifacts": {
4
- "connector_manifest.yml": "1d2826d511f1b9ad3c921d7cca5d094285890c92bdd61cf4d27fc33853301e7d",
5
- "dockerhub_api/connectors/mcp_source_presets.json": "96b893636a49ece1a5f32decb9aea8e3740178cb5e4a19753748b4d18e7ca678",
6
- "dockerhub_api/connectors/tool_schema_fingerprints.json": "60f37329f11dc900fa385099069f005c7fc8f4b8afcb0ac05d48794b1c62324a",
7
4
  "dockerhub_api/ontology/dockerhub.ttl": "bd3f4498e3e9463ee4395a5da1d6afcbfc081a1437e1be52437ab4d52e18d55a",
8
5
  "dockerhub_api/ontology/fixtures/records.json": "cdf24bdcd53b75daef789c05f93d55ced4ce4a138360a2ff9f1e34c55f8f6da8",
9
6
  "dockerhub_api/ontology/mappings/source.yaml": "72d333a63cb808bbc9a2f031834fa4c75919b11a8171ad5b347fad61247fa016",
@@ -16,30 +16,25 @@
16
16
  rdfs:label "Docker Hub Namespace" ;
17
17
  rdfs:comment "A Docker Hub account/organization namespace that owns image repositories (the {namespace} in namespaces/{ns}/repositories)." .
18
18
 
19
- :Organization a owl:Class ;
20
- rdfs:subClassOf :Namespace ;
21
- rdfs:label "Docker Hub Organization" ;
22
- rdfs:comment "An organization namespace with members, teams, settings, and invites (hub_org)." .
19
+ :Organization a owl:Class .
20
+
21
+
22
+ :Repository a owl:Class .
23
23
 
24
- :Repository a owl:Class ;
25
- rdfs:label "Container Repository" ;
26
- rdfs:comment "A Docker Hub image repository holding tags and container images (hub_repos list/get)." .
27
24
 
28
25
  :ContainerImage a owl:Class ;
29
26
  rdfs:label "Container Image" ;
30
27
  rdfs:comment "A concrete, content-addressable OCI/Docker image (a repository tag resolving to a digest, size, and platform) — hub_repos list_tags / get_tag and hub_registry manifests." .
31
28
 
32
- :Team a owl:Class ;
33
- rdfs:label "Team" ;
34
- rdfs:comment "An organization group (team) granted repository permissions (hub_teams / hub_repos assign_group)." .
29
+ :Team a owl:Class .
30
+
35
31
 
36
32
  :AccessToken a owl:Class ;
37
33
  rdfs:label "Access Token" ;
38
34
  rdfs:comment "A personal or organization access token (PAT / OAT) scoped for registry and API access (hub_auth / hub_org tokens). Secret material is never ingested." .
39
35
 
40
- :Vulnerability a owl:Class ;
41
- rdfs:label "Vulnerability" ;
42
- rdfs:comment "A CVE / security finding reported against a container image by Docker Scout (hub_scout)." .
36
+ :Vulnerability a owl:Class .
37
+
43
38
 
44
39
  # --- links (owl:ObjectProperty) ---
45
40
 
@@ -138,5 +133,8 @@
138
133
  rdfs:comment """Docker Hub container-registry model — namespaces and organizations,
139
134
  image repositories, tags and the concrete container images they resolve to (digest,
140
135
  architecture, size), teams and their repository permissions, access tokens, and Docker
141
- Scout vulnerabilities — federated into the agent-connector-sdk knowledge-graph hub.""" ;
142
- owl:imports <http://knuckles.team/kg> .
136
+ Scout vulnerabilities — federated into the agent-connector-sdk knowledge-graph hub.""" .
137
+
138
+ # ontology-codemod R3
139
+ <http://knuckles.team/kg#ContainerImage> rdfs:subClassOf <http://knuckles.team/kg/infrastructure#ContainerImage> .
140
+ <http://knuckles.team/kg#Namespace> rdfs:subClassOf <http://knuckles.team/kg/infrastructure#Namespace> .
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dockerhub-api
3
- Version: 1.3.3
3
+ Version: 1.3.4
4
4
  Summary: Docker Hub API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,11 +12,11 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=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.18
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
16
16
  Requires-Dist: httpx>=0.28.1
17
17
  Requires-Dist: python-dotenv>=1.2.4
18
18
  Provides-Extra: mcp
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
20
20
  Provides-Extra: all
21
21
  Requires-Dist: dockerhub-api[mcp]>=1.0.1; extra == "all"
22
22
  Provides-Extra: test
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/dockerhub-api)
42
42
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/dockerhub-api)
43
43
 
44
- *Version: 1.3.3*
44
+ *Version: 1.3.4*
45
45
 
46
46
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
47
47
  > Docker Hub platform are maintained in [docs/](docs/index.md).
@@ -7,6 +7,7 @@ dockerhub_api/__init__.py
7
7
  dockerhub_api/__main__.py
8
8
  dockerhub_api/api_client.py
9
9
  dockerhub_api/auth.py
10
+ dockerhub_api/connector_sources.py
10
11
  dockerhub_api/dockerhub_input_models.py
11
12
  dockerhub_api/dockerhub_response_models.py
12
13
  dockerhub_api/kg_ingest.py
@@ -32,8 +33,6 @@ dockerhub_api/api/api_client_repositories.py
32
33
  dockerhub_api/api/api_client_scim.py
33
34
  dockerhub_api/api/api_client_scout.py
34
35
  dockerhub_api/connectors/__init__.py
35
- dockerhub_api/connectors/mcp_source_presets.json
36
- dockerhub_api/connectors/tool_schema_fingerprints.json
37
36
  dockerhub_api/mcp/__init__.py
38
37
  dockerhub_api/mcp/mcp_admin.py
39
38
  dockerhub_api/mcp/mcp_audit.py
@@ -7,8 +7,5 @@ dockerhub-api = dockerhub_api.ontology
7
7
  [agent_connector_sdk.skill_providers]
8
8
  dockerhub-api = dockerhub_api.skills
9
9
 
10
- [agent_connector_sdk.source_connector_providers]
11
- dockerhub-api = dockerhub_api.connectors
12
-
13
10
  [console_scripts]
14
11
  dockerhub-mcp = dockerhub_api.mcp_server:mcp_server
@@ -1,4 +1,4 @@
1
- agent-connector-sdk[mcp]<1.0.0,>=0.3.18
1
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.1
2
2
  httpx>=0.28.1
3
3
  python-dotenv>=1.2.4
4
4
 
@@ -6,7 +6,7 @@ python-dotenv>=1.2.4
6
6
  dockerhub-api[mcp]>=1.0.1
7
7
 
8
8
  [mcp]
9
- agent-connector-sdk[mcp]<1.0.0,>=0.3.18
9
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.1
10
10
 
11
11
  [test]
12
12
  pytest-xdist>=3.8.0
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dockerhub-api"
7
- version = "1.3.3"
7
+ version = "1.3.4"
8
8
  description = "Docker Hub API + MCP Server"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.12, <3.15"
12
- dependencies = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0", "httpx>=0.28.1", "python-dotenv>=1.2.4",]
12
+ dependencies = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0", "httpx>=0.28.1", "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.18,<1.0.0",]
21
+ mcp = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0",]
22
22
  all = [ "dockerhub-api[mcp]>=1.0.1",]
23
23
  test = [
24
24
  "pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0",]
@@ -32,9 +32,6 @@ dockerhub-api = "dockerhub_api.skills"
32
32
  [project.entry-points."agent_connector_sdk.ontology_providers"]
33
33
  dockerhub-api = "dockerhub_api.ontology"
34
34
 
35
- [project.entry-points."agent_connector_sdk.source_connector_providers"]
36
- dockerhub-api = "dockerhub_api.connectors"
37
-
38
35
  # The one declared connector identity: the fleet name (SDK-CONNECTOR-CONTROL-R071).
39
36
  [project.entry-points."agent_connector_sdk.connector"]
40
37
  dockerhub-mcp = "dockerhub_api"
@@ -0,0 +1,3 @@
1
+ agent-connector-sdk[mcp]>=0.4.1,<1.0.0
2
+ httpx>=0.27.0
3
+ python-dotenv>=1.0.0
@@ -2,9 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from agent_connector_sdk.connector_identity import connector_name
5
6
  import ast
6
- import json
7
- import re
8
7
  import tomllib
9
8
  from pathlib import Path
10
9
 
@@ -38,16 +37,6 @@ def test_connector_name_is_the_fleet_name() -> None:
38
37
  assert pyproject["project"]["entry-points"]["agent_connector_sdk.connector"] == {
39
38
  FLEET: "dockerhub_api"
40
39
  }
41
- manifest_path = PACKAGE / "connector_manifest.yml"
42
- if not manifest_path.is_file():
43
- manifest_path = ROOT / "connector_manifest.yml"
44
- manifest = manifest_path.read_text(encoding="utf-8")
45
- match = re.search(r'^\s*"?connector"?\s*:\s*"?([^"\s,]+)', manifest, re.MULTILINE)
46
- assert match is not None and match.group(1) == FLEET
47
- fingerprints = PACKAGE / "connectors" / "tool_schema_fingerprints.json"
48
- if fingerprints.is_file():
49
- assert (
50
- json.loads(fingerprints.read_text(encoding="utf-8"))["connector"] == FLEET
51
- )
40
+ assert connector_name("dockerhub_api") == FLEET
52
41
  for module in sorted(PACKAGE.glob("*.py")):
53
42
  assert all(name == FLEET for name in _call_connectors(module)), module.name
@@ -69,7 +69,7 @@ async def test_ingest_entities_writes_nodes_and_edges(ingest):
69
69
  a_record = next(r for r in request.records if r.record_id == "a")
70
70
  assert a_record.payload["name"] == "r"
71
71
  assert request.relationships[0].relation_reference.endswith(
72
- "resources/Repository/relations/inNamespace"
72
+ "relations/Repository/inNamespace"
73
73
  )
74
74
 
75
75
 
@@ -1,18 +0,0 @@
1
- {
2
- "_comment": "Tier-1 mcp_tool source presets for dockerhub-api (AU-KG.ingest.mcp-tool-connector). Syncs Docker Hub repositories into the KG as repository documents via the dockerhub-api MCP server hub_repos tool. Contributed presets win over the central MCP_TOOL_PRESETS. The native dockerhub_ingest_repositories tool + kg_ingest.py provide the typed :Repository/:ContainerImage graph nodes.",
3
- "dockerhub-repositories": {
4
- "server": "dockerhub-mcp",
5
- "tool": "dockerhub_get_repositories",
6
- "records_path": "data.results",
7
- "id_field": "name",
8
- "title_field": "name",
9
- "text_field": "description",
10
- "updated_field": "last_updated",
11
- "pagination": "page",
12
- "page_kind": "number",
13
- "page_param": "page",
14
- "page_size_param": "page_size",
15
- "doc_type": "repository",
16
- "params_style": "args"
17
- }
18
- }
@@ -1,8 +0,0 @@
1
- {
2
- "algorithm": "agent-connector-sdk:mcp-tool-contract-compat:v2",
3
- "connector": "dockerhub-mcp",
4
- "schema_version": "1",
5
- "tools": {
6
- "dockerhub_get_repositories": "c6fb6018860f39159633a23ca0b19a3555daa371598111e280e753ef80ca0595"
7
- }
8
- }
@@ -1,3 +0,0 @@
1
- agent-connector-sdk[mcp]>=0.2.1,<1.0.0
2
- httpx>=0.27.0
3
- python-dotenv>=1.0.0
File without changes
File without changes
File without changes