nextcloud-agent 1.0.1__tar.gz → 2.3.2__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 (81) hide show
  1. {nextcloud_agent-1.0.1/nextcloud_agent.egg-info → nextcloud_agent-2.3.2}/PKG-INFO +135 -87
  2. nextcloud_agent-1.0.1/PKG-INFO → nextcloud_agent-2.3.2/README.md +121 -104
  3. nextcloud_agent-2.3.2/nextcloud_agent/__init__.py +1 -0
  4. nextcloud_agent-2.3.2/nextcloud_agent/__main__.py +4 -0
  5. nextcloud_agent-2.3.2/nextcloud_agent/api/api_client_base.py +330 -0
  6. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/api/api_client_calendar.py +14 -8
  7. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/api/api_client_contacts.py +14 -7
  8. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/api/api_client_files.py +13 -11
  9. nextcloud_agent-2.3.2/nextcloud_agent/api/xml_security.py +46 -0
  10. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/auth.py +10 -13
  11. nextcloud_agent-2.3.2/nextcloud_agent/connectors/mcp_source_presets.json +14 -0
  12. nextcloud_agent-2.3.2/nextcloud_agent/connectors/tool_schema_fingerprints.json +8 -0
  13. nextcloud_agent-2.3.2/nextcloud_agent/kg_ingest.py +221 -0
  14. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/mcp_server.py +21 -23
  15. nextcloud_agent-2.3.2/nextcloud_agent/ontology/__init__.py +7 -0
  16. nextcloud_agent-2.3.2/nextcloud_agent/ontology/certification.json +36 -0
  17. nextcloud_agent-2.3.2/nextcloud_agent/ontology/fixtures/records.json +20 -0
  18. nextcloud_agent-2.3.2/nextcloud_agent/ontology/mappings/source.yaml +20 -0
  19. nextcloud_agent-2.3.2/nextcloud_agent/ontology/migrations/manifest.json +6 -0
  20. nextcloud_agent-2.3.2/nextcloud_agent/ontology/nextcloud.ttl +92 -0
  21. nextcloud_agent-2.3.2/nextcloud_agent/ontology/shapes/connector.shacl.ttl +84 -0
  22. nextcloud_agent-2.3.2/nextcloud_agent/prompts/file_steward.json +43 -0
  23. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-agent-operations/SKILL.md +33 -0
  24. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-agent-operations/agents/openai.yaml +4 -0
  25. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-agent-operations/references/catalog.md +7 -0
  26. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-files/SKILL.md +89 -0
  27. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-files/WORKFLOW.md +78 -0
  28. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-ingest/SKILL.md +82 -0
  29. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-ingest/WORKFLOW.md +70 -0
  30. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-shares/SKILL.md +81 -0
  31. nextcloud_agent-2.3.2/nextcloud_agent/skills/nextcloud-shares/WORKFLOW.md +70 -0
  32. nextcloud_agent-1.0.1/README.md → nextcloud_agent-2.3.2/nextcloud_agent.egg-info/PKG-INFO +152 -73
  33. nextcloud_agent-2.3.2/nextcloud_agent.egg-info/SOURCES.txt +57 -0
  34. nextcloud_agent-2.3.2/nextcloud_agent.egg-info/entry_points.txt +17 -0
  35. nextcloud_agent-2.3.2/nextcloud_agent.egg-info/requires.txt +18 -0
  36. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent.egg-info/top_level.txt +3 -0
  37. nextcloud_agent-2.3.2/pyproject.toml +84 -0
  38. nextcloud_agent-2.3.2/scripts/security_sanitizer.py +318 -0
  39. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/scripts/verify_api_integration.py +153 -112
  40. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/tests/conftest.py +1 -0
  41. nextcloud_agent-2.3.2/tests/test_api_client.py +0 -0
  42. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/tests/test_auth.py +8 -6
  43. nextcloud_agent-2.3.2/tests/test_cli_server.py +18 -0
  44. nextcloud_agent-2.3.2/tests/test_default_content_surfaces.py +43 -0
  45. nextcloud_agent-2.3.2/tests/test_fleet_name.py +53 -0
  46. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/tests/test_init_dynamics.py +1 -0
  47. nextcloud_agent-2.3.2/tests/test_kg_ingest.py +128 -0
  48. nextcloud_agent-2.3.2/tests/test_mcp_server.py +100 -0
  49. nextcloud_agent-2.3.2/tests/test_xml_security.py +68 -0
  50. nextcloud_agent-1.0.1/nextcloud_agent/__init__.py +0 -1
  51. nextcloud_agent-1.0.1/nextcloud_agent/__main__.py +0 -4
  52. nextcloud_agent-1.0.1/nextcloud_agent/agent_server.py +0 -85
  53. nextcloud_agent-1.0.1/nextcloud_agent/api/api_client_base.py +0 -129
  54. nextcloud_agent-1.0.1/nextcloud_agent/mcp/__init__.py +0 -19
  55. nextcloud_agent-1.0.1/nextcloud_agent/mcp/mcp_calendar.py +0 -56
  56. nextcloud_agent-1.0.1/nextcloud_agent/mcp/mcp_contacts.py +0 -56
  57. nextcloud_agent-1.0.1/nextcloud_agent/mcp/mcp_files.py +0 -66
  58. nextcloud_agent-1.0.1/nextcloud_agent/mcp/mcp_sharing.py +0 -56
  59. nextcloud_agent-1.0.1/nextcloud_agent/mcp/mcp_user.py +0 -52
  60. nextcloud_agent-1.0.1/nextcloud_agent/prompts/main_agent.json +0 -20
  61. nextcloud_agent-1.0.1/nextcloud_agent/skills/nextcloud-starter/SKILL.md +0 -19
  62. nextcloud_agent-1.0.1/nextcloud_agent.egg-info/SOURCES.txt +0 -43
  63. nextcloud_agent-1.0.1/nextcloud_agent.egg-info/entry_points.txt +0 -9
  64. nextcloud_agent-1.0.1/nextcloud_agent.egg-info/requires.txt +0 -19
  65. nextcloud_agent-1.0.1/pyproject.toml +0 -65
  66. nextcloud_agent-1.0.1/scripts/security_sanitizer.py +0 -160
  67. nextcloud_agent-1.0.1/tests/test_action_discovery.py +0 -59
  68. nextcloud_agent-1.0.1/tests/test_cli_server.py +0 -61
  69. nextcloud_agent-1.0.1/tests/test_concept_parity.py +0 -89
  70. nextcloud_agent-1.0.1/tests/test_mcp_server.py +0 -175
  71. nextcloud_agent-1.0.1/tests/test_startup.py +0 -11
  72. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/LICENSE +0 -0
  73. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/api/__init__.py +0 -0
  74. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/api_client.py +0 -0
  75. {nextcloud_agent-1.0.1/nextcloud_agent/prompts → nextcloud_agent-2.3.2/nextcloud_agent/connectors}/__init__.py +0 -0
  76. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent/mcp_config.json +0 -0
  77. {nextcloud_agent-1.0.1/nextcloud_agent/skills → nextcloud_agent-2.3.2/nextcloud_agent/prompts}/__init__.py +0 -0
  78. nextcloud_agent-1.0.1/tests/test_api_client.py → nextcloud_agent-2.3.2/nextcloud_agent/skills/__init__.py +0 -0
  79. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/nextcloud_agent.egg-info/dependency_links.txt +0 -0
  80. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/setup.cfg +0 -0
  81. {nextcloud_agent-1.0.1 → nextcloud_agent-2.3.2}/tests/test_init.py +1 -1
@@ -1,32 +1,32 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextcloud-agent
3
- Version: 1.0.1
3
+ Version: 2.3.2
4
4
  Summary: Nextcloud MCP Server for Agentic AI!
5
- Author-email: Audel Rouhi <knucklessg1@gmail.com>
5
+ Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
7
7
  Classifier: Development Status :: 3 - Alpha
8
8
  Classifier: License :: OSI Approved :: MIT License
9
9
  Classifier: Environment :: Console
10
10
  Classifier: Operating System :: POSIX :: Linux
11
11
  Classifier: Programming Language :: Python :: 3
12
- Requires-Python: <3.15,>=3.11
12
+ Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-utilities[mcp]>=1.0.0
16
- Requires-Dist: python-dateutil>=2.8.2
17
- Requires-Dist: icalendar>=6.1.1
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18
16
+ Requires-Dist: requests>=2.34.2
17
+ Requires-Dist: defusedxml>=0.7.1
18
+ Requires-Dist: python-dateutil>=2.9.0.post0
19
+ Requires-Dist: icalendar>=7.3.0
18
20
  Requires-Dist: vobject>=0.9.9
19
21
  Provides-Extra: mcp
20
- Requires-Dist: agent-utilities[mcp]>=1.0.0; extra == "mcp"
21
- Provides-Extra: agent
22
- Requires-Dist: agent-utilities[agent,logfire]>=1.0.0; extra == "agent"
22
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
23
23
  Provides-Extra: all
24
- Requires-Dist: agent-utilities[agent,logfire,mcp]>=1.0.0; extra == "all"
24
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "all"
25
25
  Provides-Extra: test
26
- Requires-Dist: pytest-xdist>=3.6.0; extra == "test"
27
- Requires-Dist: pytest; extra == "test"
28
- Requires-Dist: pytest-asyncio; extra == "test"
29
- Requires-Dist: pytest-cov; extra == "test"
26
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
27
+ Requires-Dist: pytest>=9.1.1; extra == "test"
28
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == "test"
29
+ Requires-Dist: pytest-cov>=7.1.0; extra == "test"
30
30
  Dynamic: license-file
31
31
 
32
32
  # Nextcloud Agent
@@ -51,7 +51,7 @@ Dynamic: license-file
51
51
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/nextcloud-agent)
52
52
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/nextcloud-agent)
53
53
 
54
- *Version: 1.0.1*
54
+ *Version: 2.3.2*
55
55
 
56
56
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
57
57
  > interfaces, and guidance for provisioning the backing Nextcloud instance are
@@ -68,7 +68,7 @@ Dynamic: license-file
68
68
  ## Key Features
69
69
 
70
70
  - **Consolidated Action-Routed MCP Tools:** Minimizes token overhead and eliminates tool bloat in LLM contexts by grouping methods into optimized, togglable tool modules.
71
- - **Enterprise-Grade Security:** Comprehensive support for Eunomia policies, OIDC token delegation, and granular execution context tracking.
71
+ - **Enterprise-Grade Security:** Complete support for Eunomia policies, OIDC token delegation, and granular execution context tracking.
72
72
  - **Integrated Graph Agent:** Built-in Pydantic AI agent supporting the Agent Control Protocol (ACP) and standard Web interfaces (AG-UI).
73
73
  - **Native Telemetry & Tracing:** Out-of-the-box OpenTelemetry exports and native Langfuse tracing.
74
74
 
@@ -76,7 +76,7 @@ Dynamic: license-file
76
76
 
77
77
  ## CLI or API
78
78
 
79
- This agent wraps the Nextcloud MCP Server for Agentic AI! API. You can interact with it programmatically or via its integrated execution entrypoints.
79
+ This agent wraps the Nextcloud MCP Server for Agentic AI! API. The operator can interact with it programmatically or via its integrated execution entrypoints.
80
80
 
81
81
  Detailed instructions on how to use the underlying API wrappers, extended schema bindings, and developer SDK references are maintained in [docs/index.md](docs/index.md).
82
82
 
@@ -84,28 +84,29 @@ Detailed instructions on how to use the underlying API wrappers, extended schema
84
84
 
85
85
  ## MCP
86
86
 
87
- This server utilizes dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.
87
+ This server use dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.
88
88
 
89
89
  ### Available MCP Tools
90
90
 
91
- <!-- This table is auto-generated by `python -m agent_utilities.mcp.readme_tools` — do not edit by hand. -->
91
+ <!-- This table is auto-generated by `python -m agent_connector_sdk.mcp.readme_tools` — do not edit by hand. -->
92
92
 
93
93
  <!-- MCP-TOOLS-TABLE:START -->
94
94
 
95
- #### Condensed action-routed tools (default — `MCP_TOOL_MODE=condensed`)
95
+ #### Condensed action-routed tools (`MCP_TOOL_MODE=condensed`)
96
96
 
97
97
  | MCP Tool | Toggle Env Var | Description |
98
98
  |----------|----------------|-------------|
99
99
  | `nextcloud_calendar` | `CALENDARTOOL` | Manage nextcloud calendar operations. |
100
100
  | `nextcloud_contacts` | `CONTACTSTOOL` | Manage nextcloud contacts operations. |
101
101
  | `nextcloud_files` | `FILESTOOL` | Manage nextcloud files operations. |
102
+ | `nextcloud_ingest_file` | `INGESTTOOL` | Fetch a Nextcloud file over WebDAV and natively store it in the knowledge |
102
103
  | `nextcloud_sharing` | `SHARINGTOOL` | Manage nextcloud sharing operations. |
103
104
  | `nextcloud_user` | `USERTOOL` | Manage nextcloud user operations. |
104
105
 
105
106
  #### Verbose 1:1 API-mapped tools (`MCP_TOOL_MODE=verbose` or `both`)
106
107
 
107
108
  <details>
108
- <summary>27 per-operation tools — one per public API method (click to expand)</summary>
109
+ <summary>26 per-operation tools — one per public API method (click to expand)</summary>
109
110
 
110
111
  | MCP Tool | Toggle Env Var | Description |
111
112
  |----------|----------------|-------------|
@@ -133,22 +134,21 @@ This server utilizes dynamic Action-Routed tools to optimize token overhead and
133
134
  | `nextcloud_list_shares` | `APITOOL` | List all shares. |
134
135
  | `nextcloud_move_item` | `APITOOL` | Alias for move_resource to support MCP server action. |
135
136
  | `nextcloud_move_resource` | `APITOOL` | Move a file or directory. |
136
- | `nextcloud_ocs_request` | `BASE_API_CLIENTTOOL` | Make a request to the OCS API. |
137
137
  | `nextcloud_read_file` | `APITOOL` | Download a file. |
138
138
  | `nextcloud_write_file` | `APITOOL` | Upload a file. |
139
139
 
140
140
  </details>
141
141
 
142
- _5 action-routed tool(s) (default) · 27 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (`condensed` default · `verbose` 1:1 · `both`). Auto-generated — do not edit._
142
+ _6 action-routed tool(s) · 26 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (**`intent` default** — the six verb-tools, granular set loaded on demand · `condensed` action-routed · `verbose` 1:1 · `both`). Auto-generated — do not edit._
143
143
  <!-- MCP-TOOLS-TABLE:END -->
144
144
 
145
- Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/mcp.md](docs/mcp.md).
145
+ Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/usage.md](docs/usage.md).
146
146
 
147
147
  ### Dynamic Tool Selection & Visibility
148
148
 
149
- This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows you to restrict the set of exposed tools in order to prevent blowing up the LLM's context window.
149
+ This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows the operator to restrict the set of exposed tools to prevent blowing up the LLM's context window.
150
150
 
151
- You can configure tool filtering via multiple input channels:
151
+ The operator can configure tool filtering via multiple input channels:
152
152
 
153
153
  - **CLI Arguments:** Pass `--tools` or `--toolsets` (or their disabled counterparts `--disabled-tools` and `--disabled-toolsets`) during startup.
154
154
  - **Environment Variables:** Define standard environment variables:
@@ -157,7 +157,7 @@ You can configure tool filtering via multiple input channels:
157
157
  - **HTTP SSE Request Headers:** Pass custom headers during transport initialization:
158
158
  - `x-mcp-enabled-tools` / `x-mcp-disabled-tools`
159
159
  - `x-mcp-enabled-tags` / `x-mcp-disabled-tags`
160
- - **HTTP SSE Request Query Parameters:** Append query parameters directly to your transport connection URL:
160
+ - **HTTP SSE Request Query Parameters:** Append query parameters directly to the operator's transport connection URL:
161
161
  - `?tools=tool1,tool2`
162
162
  - `?tags=tag1`
163
163
 
@@ -169,11 +169,10 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
169
169
 
170
170
  <!-- MCP-CONFIG-EXAMPLES:START -->
171
171
 
172
- > **Install the slim `[mcp]` extra.** All examples install `nextcloud-agent[mcp]` — the
173
- > MCP-server extra that pulls only the FastMCP / FastAPI tooling (`agent-utilities[mcp]`).
174
- > It deliberately **excludes** the heavy agent runtime (`pydantic-ai`, the epistemic-graph
175
- > engine, `dspy`, `llama-index`), so `uvx` / container installs are far smaller. Use the
176
- > full `[agent]` extra only when you need the integrated Pydantic AI agent.
172
+ > **Install the connector-focused `[mcp]` extra.** Examples use `nextcloud-agent[mcp]` to add
173
+ > FastMCP / FastAPI through `agent-connector-sdk[mcp]`; the required Agent Utilities core
174
+ > still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
175
+ > enables model orchestration.
177
176
 
178
177
  #### stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
179
178
 
@@ -188,7 +187,6 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
188
187
  "nextcloud-mcp"
189
188
  ],
190
189
  "env": {
191
- "MCP_TOOL_MODE": "condensed",
192
190
  "CALENDARTOOL": "True",
193
191
  "CONTACTSTOOL": "True",
194
192
  "FILESTOOL": "True",
@@ -203,6 +201,10 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
203
201
  }
204
202
  ```
205
203
 
204
+ Runtime references require an alias-aware launcher such as Arbora. Other
205
+ launchers must omit those entries and inject the resolved values through their
206
+ own runtime secret boundary.
207
+
206
208
  #### Streamable-HTTP Transport (networked / production)
207
209
 
208
210
  ```json
@@ -221,9 +223,8 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
221
223
  ],
222
224
  "env": {
223
225
  "TRANSPORT": "streamable-http",
224
- "HOST": "0.0.0.0",
226
+ "HOST": "127.0.0.1",
225
227
  "PORT": "8000",
226
- "MCP_TOOL_MODE": "condensed",
227
228
  "CALENDARTOOL": "True",
228
229
  "CONTACTSTOOL": "True",
229
230
  "FILESTOOL": "True",
@@ -250,27 +251,35 @@ Alternatively, connect to a pre-deployed Streamable-HTTP instance by `url`:
250
251
  }
251
252
  ```
252
253
 
253
- Deploying the Streamable-HTTP server via Docker:
254
+ Run a reviewed container image as a least-privilege stdio child (no
255
+ listener or published port):
254
256
 
255
257
  ```bash
256
- docker run -d \
257
- --name nextcloud-mcp-mcp \
258
- -p 8000:8000 \
259
- -e TRANSPORT=streamable-http \
260
- -e HOST=0.0.0.0 \
261
- -e PORT=8000 \
262
- -e MCP_TOOL_MODE=condensed \
258
+ docker run -i --rm \
259
+ --read-only \
260
+ --cap-drop=ALL \
261
+ --security-opt=no-new-privileges \
262
+ --pids-limit=256 \
263
+ --tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
264
+ -e TRANSPORT=stdio \
265
+ -e MCP_TOOL_MODE=intent \
263
266
  -e CALENDARTOOL=True \
264
267
  -e CONTACTSTOOL=True \
265
268
  -e FILESTOOL=True \
269
+ -e INGESTTOOL=True \
266
270
  -e NEXTCLOUD_PASSWORD=your_password \
267
271
  -e NEXTCLOUD_URL=https://nextcloud.example.com \
268
272
  -e NEXTCLOUD_USERNAME=your_username \
269
273
  -e SHARINGTOOL=True \
270
274
  -e USERTOOL=True \
271
- knucklessg1/nextcloud-agent:mcp
275
+ registry.example.invalid/nextcloud-agent@sha256:<digest> nextcloud-mcp
272
276
  ```
273
277
 
278
+ For containerized network HTTP, supply an authenticated TLS ingress (or
279
+ direct server TLS), exact `MCP_ALLOWED_HOSTS`, and an exact trusted-proxy
280
+ CIDR policy through the operator-owned deployment profile. The generator
281
+ does not emit an unauthenticated non-loopback listener.
282
+
274
283
  _Auto-generated from the code-read env surface (`MCP_TOOL_MODE` + package vars) — do not edit._
275
284
  <!-- MCP-CONFIG-EXAMPLES:END -->
276
285
 
@@ -285,13 +294,17 @@ consumed from a **remote deployment**. The
285
294
 
286
295
  - **Local container / uv** — launch the server from `mcp_config.json` via `uvx`,
287
296
  `docker run`, or `podman run`, or point at a local streamable-http container by `url`.
297
+ The published container runs as a reviewed, least-privilege stdio child with no
298
+ listener or published port by default (see the hardened `docker run` example above).
288
299
  - **Remote URL** — connect to a server deployed behind Caddy at
289
- `http://nextcloud-mcp.arpa/mcp` using the `"url"` key.
300
+ `https://nextcloud-mcp.example.invalid/mcp` using the `"url"` key, or through any
301
+ operator-supplied authenticated HTTPS ingress. Keep its URL, outbound identity
302
+ references, trust profile, and exact `MCP_ALLOWED_HOSTS` in `AgentConfig`.
290
303
  <!-- END GENERATED: additional-deployment-options -->
291
304
 
292
305
  ## Agent
293
306
 
294
- This repository features a fully integrated Pydantic AI Graph Agent. It communicates over the **Agent Control Protocol (ACP)** and interacts seamlessly with the **Agent Web UI (AG-UI)** and Terminal interface.
307
+ This repository features a fully integrated Pydantic AI Graph Agent. It communicates over the **Agent Control Protocol (ACP)** and interacts smoothly with the **Agent Web UI (AG-UI)** and Terminal interface.
295
308
 
296
309
  ### Running the Agent CLI
297
310
  To start the interactive command-line agent:
@@ -340,7 +353,7 @@ services:
340
353
  max-file: "3"
341
354
 
342
355
  nextcloud-agent-agent:
343
- image: knucklessg1/nextcloud-agent:latest
356
+ image: knucklessg1/nextcloud-agent:2.3.2
344
357
  container_name: nextcloud-agent-agent
345
358
  hostname: nextcloud-agent-agent
346
359
  restart: always
@@ -354,9 +367,6 @@ services:
354
367
  - HOST=0.0.0.0
355
368
  - PORT=9016
356
369
  - MCP_URL=http://nextcloud-agent-mcp:8000/mcp
357
- - PROVIDER=${PROVIDER:-openai}
358
- - MODEL_ID=${MODEL_ID:-gpt-4o}
359
- - ENABLE_WEB_UI=True
360
370
  - ENABLE_OTEL=True
361
371
  ports:
362
372
  - "9016:9016"
@@ -374,13 +384,13 @@ services:
374
384
 
375
385
  ```
376
386
 
377
- Detailed graph node architecture explanations, custom skill configurations, and agentic trace guides are available in [docs/agent.md](docs/agent.md).
387
+ Detailed graph node architecture explanations, custom skill configurations, and agentic trace guides are available in [docs/deployment.md](docs/deployment.md).
378
388
 
379
389
  ---
380
390
 
381
391
  ## Security & Governance
382
392
 
383
- Built directly upon the enterprise-ready [`agent-utilities`](https://github.com/Knuckles-Team/agent-utilities) core, standard security parameters are fully supported:
393
+ Built directly upon the enterprise-ready [`agent-connector-sdk`](https://github.com/Knuckles-Team/agent-connector-sdk) core, standard security parameters are fully supported:
384
394
 
385
395
  ### Access Control & Policy Enforcement
386
396
  - **Eunomia Policies:** Fine-grained, policy-driven tool authorization. Supports `none`, local `embedded` (`mcp_policies.json`), or centralized `remote` modes.
@@ -388,7 +398,7 @@ Built directly upon the enterprise-ready [`agent-utilities`](https://github.com/
388
398
  - **Scoped Credentials:** Execution context runs restricted to the specific caller identity.
389
399
 
390
400
  ### Runtime Security Grid
391
- | Feature | Functionality | Enablement |
401
+ | Feature | Feature | Enablement |
392
402
  |---------|---------------|------------|
393
403
  | **Tool Guard** | Sensitivity inspection with human-in-the-loop validation | Enabled by default |
394
404
  | **Prompt Injection Defense** | Input scanning, repetition monitoring, and recursive loop blocks | Enabled by default |
@@ -409,42 +419,42 @@ Built directly upon the enterprise-ready [`agent-utilities`](https://github.com/
409
419
  | `TRANSPORT` | `stdio` | options: stdio, streamable-http, sse |
410
420
  | `ENABLE_OTEL` | `True` | |
411
421
  | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:8080/api/public/otel` | |
412
- | `OTEL_EXPORTER_OTLP_PUBLIC_KEY` | `pk-...` | |
413
- | `OTEL_EXPORTER_OTLP_SECRET_KEY` | `sk-...` | |
422
+ | `OTEL_EXPORTER_OTLP_PUBLIC_KEY_REF` | `vault-ref-to-pk` | |
423
+ | `OTEL_EXPORTER_OTLP_SECRET_KEY_REF` | `vault-ref-to-sk` | |
414
424
  | `OTEL_EXPORTER_OTLP_PROTOCOL` | `http/protobuf` | |
415
425
  | `EUNOMIA_TYPE` | `none` | options: none, embedded, remote |
416
426
  | `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | |
417
427
  | `EUNOMIA_REMOTE_URL` | `http://eunomia-server:8000` | |
418
428
  | `NEXTCLOUD_URL` | `https://nextcloud.example.com` | |
419
429
  | `NEXTCLOUD_USERNAME` | `your_username` | |
420
- | `NEXTCLOUD_PASSWORD` | `your_password` | |
421
- | `NEXTCLOUD_SSL_VERIFY` | `True` | |
430
+ | `NEXTCLOUD_PASSWORD` | secret-injected | |
431
+ | `TLS_PROFILE` | `private-ca` | AgentConfig named transport profile |
432
+ | `TLS_PROFILE_REF` | `secret://transport/provider` | Direct runtime profile reference |
433
+ | `TLS_PROFILES_REF` | `secret://transport/catalog` | Named runtime profile catalog |
422
434
  | `FILESTOOL` | `True` | |
423
435
  | `USERTOOL` | `True` | |
424
436
  | `SHARINGTOOL` | `True` | |
425
437
  | `CALENDARTOOL` | `True` | |
426
438
  | `CONTACTSTOOL` | `True` | |
427
439
 
428
- #### Inherited agent-utilities variables (apply to every connector)
440
+ #### Inherited agent-connector-sdk variables (apply to every connector)
429
441
 
430
442
  | Variable | Example | Description |
431
443
  |----------|---------|-------------|
432
- | `MCP_TOOL_MODE` | `condensed` | Tool surface: `condensed` | `verbose` | `both` |
433
444
  | `MCP_ENABLED_TOOLS` | — | Comma-separated tool allow-list |
434
445
  | `MCP_DISABLED_TOOLS` | — | Comma-separated tool deny-list |
435
446
  | `MCP_ENABLED_TAGS` | — | Comma-separated tag allow-list |
436
447
  | `MCP_DISABLED_TAGS` | — | Comma-separated tag deny-list |
437
- | `MCP_CLIENT_AUTH` | — | Outbound MCP auth (`oidc-client-credentials` for fleet calls) |
448
+ | `MCP_CLIENT_AUTH` | — | Outbound MCP child auth: `oidc-client-credentials` \| `basic` \| `none` |
438
449
  | `OIDC_CLIENT_ID` | — | OIDC client id (service-account auth) |
439
- | `OIDC_CLIENT_SECRET` | — | OIDC client secret (service-account auth) |
450
+ | `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |
451
+ | `MCP_BASIC_AUTH_USERNAME` | — | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |
452
+ | `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |
440
453
  | `DEBUG` | `False` | Verbose logging |
441
454
  | `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |
442
455
  | `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |
443
- | `PROVIDER` | `openai` | LLM provider for the agent |
444
- | `MODEL_ID` | `gpt-4o` | Model id for the agent |
445
- | `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |
446
456
 
447
- _20 package + 14 inherited variable(s). Auto-generated from `.env.example` + the shared agent-utilities set — do not edit._
457
+ _23 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set — do not edit._
448
458
  <!-- ENV-VARS-TABLE:END -->
449
459
 
450
460
 
@@ -457,7 +467,7 @@ for a copy-paste starting point.
457
467
  | `NEXTCLOUD_URL` | Base URL of the Nextcloud instance | `https://nextcloud.example.com` |
458
468
  | `NEXTCLOUD_USERNAME` | Username (basic auth) | — |
459
469
  | `NEXTCLOUD_PASSWORD` | Password / app password (basic auth) | — |
460
- | `NEXTCLOUD_SSL_VERIFY` | TLS certificate verification | `True` |
470
+ | `TLS_PROFILE` / `TLS_PROFILE_REF` | AgentConfig transport profile selector; peer verification is mandatory | — |
461
471
 
462
472
  ### MCP server / transport
463
473
  | Variable | Description | Default |
@@ -465,7 +475,6 @@ for a copy-paste starting point.
465
475
  | `TRANSPORT` | `stdio`, `streamable-http`, or `sse` | `stdio` |
466
476
  | `HOST` | Bind host (HTTP transports) | `0.0.0.0` |
467
477
  | `PORT` | Bind port (HTTP transports) | `8000` |
468
- | `MCP_TOOL_MODE` | Tool surface: `condensed`, `verbose`, or `both` | `condensed` |
469
478
  | `MCP_ENABLED_TOOLS` / `MCP_DISABLED_TOOLS` | Comma-separated tool allow/deny list | — |
470
479
  | `MCP_ENABLED_TAGS` / `MCP_DISABLED_TAGS` | Comma-separated tag allow/deny list | — |
471
480
 
@@ -489,19 +498,19 @@ Each action-routed tool can be disabled individually via its toggle env var (set
489
498
 
490
499
  ## Installation
491
500
 
492
- Pick the extra that matches what you want to run:
501
+ Pick the extra that matches what the operator want to run:
493
502
 
494
503
  | Extra | Installs | Use when |
495
504
  |-------|----------|----------|
496
- | `nextcloud-agent[mcp]` | Slim MCP server only (`agent-utilities[mcp]` — FastMCP/FastAPI) | You only run the **MCP server** (smallest install / image) |
497
- | `nextcloud-agent[agent]` | Full agent runtime (`agent-utilities[agent,logfire]` — Pydantic AI + the epistemic-graph engine) | You run the **integrated agent** |
505
+ | `nextcloud-agent[mcp]` | Connector-focused MCP server (`agent-connector-sdk[mcp]` — FastMCP/FastAPI + `epistemic-graph[full]`) | The operator only run the **MCP server** (smallest install / image) |
506
+ | `nextcloud-agent[agent]` | Agent runtime (`agent-connector-sdk[agent-runtime,logfire]` — model orchestration + `epistemic-graph[full]`) | The operator run the **integrated agent** |
498
507
  | `nextcloud-agent[all]` | Everything (`mcp` + `agent` + `logfire`) | Development / both surfaces |
499
508
 
500
509
  ```bash
501
- # MCP server only (recommended for tool hosting — slim deps)
510
+ # Connector-focused MCP server (includes the shared graph engine)
502
511
  uv pip install "nextcloud-agent[mcp]"
503
512
 
504
- # Full agent runtime (Pydantic AI + epistemic-graph engine)
513
+ # Agent runtime (adds model orchestration to the shared graph engine)
505
514
  uv pip install "nextcloud-agent[agent]"
506
515
 
507
516
  # Everything (development)
@@ -514,26 +523,27 @@ One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `
514
523
 
515
524
  | Image tag | Build target | Contents | Entrypoint |
516
525
  |-----------|--------------|----------|------------|
517
- | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **slim**, no engine/`pydantic-ai`/`dspy`/`llama-index`/`tree-sitter` | `nextcloud-mcp` |
518
- | `knucklessg1/nextcloud-agent:latest` | `--target agent` (default) | `nextcloud-agent[agent]` — **full** agent runtime + epistemic-graph engine | `nextcloud-agent` |
526
+ | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `epistemic-graph[full]`; no model-orchestration stack | `nextcloud-mcp` |
527
+ | `knucklessg1/nextcloud-agent:2.3.2` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
519
528
 
520
529
  ```bash
521
- docker build --target mcp -t knucklessg1/nextcloud-agent:mcp docker/ # slim MCP server
522
- docker build --target agent -t knucklessg1/nextcloud-agent:latest docker/ # full agent
530
+ docker build --target mcp -t knucklessg1/nextcloud-agent:mcp docker/ # connector-focused MCP server
531
+ docker build --target agent -t knucklessg1/nextcloud-agent:2.3.2 docker/ # agent runtime
523
532
  ```
524
533
 
525
- `docker/mcp.compose.yml` runs the slim `:mcp` server; `docker/agent.compose.yml` runs the
526
- agent (`:latest`) with a co-located `:mcp` sidecar.
534
+ `docker/mcp.compose.yml` runs the connector-focused `:mcp` server; `docker/agent.compose.yml` runs the
535
+ agent (`:2.3.2`) with a co-located `:mcp` sidecar.
527
536
 
528
537
  ### Knowledge-graph database (`epistemic-graph`)
529
538
 
530
- The **full agent** (`[agent]` / `:latest`) embeds the **epistemic-graph** engine (pulled in
531
- transitively via `agent-utilities[agent]`). For production — or to share one knowledge graph
539
+ Both `[mcp]` and `[agent]` carry the **epistemic-graph** engine through the required
540
+ Agent Utilities core dependency (`epistemic-graph[full]`). The `[mcp]` extra keeps
541
+ the server connector-focused; `[agent]` also enables model orchestration. Local
542
+ deployments can use the bundled engine. For production — or to share one knowledge graph
532
543
  across multiple agents — run **epistemic-graph as its own database container** and point the
533
544
  agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
534
545
  config, and the full database architecture (with diagrams) are documented in the
535
546
  [epistemic-graph deployment guide](https://knuckles-team.github.io/epistemic-graph/deployment/).
536
- The slim `[mcp]` server does **not** require the database.
537
547
 
538
548
  ---
539
549
 
@@ -556,20 +566,20 @@ the recommended reference for installation, deployment, and day-to-day operation
556
566
 
557
567
  ## Repository Owners
558
568
 
559
- <img width="100%" height="180em" src="https://github-readme-stats.vercel.app/api?username=Knucklessg1&show_icons=true&hide_border=true&&count_private=true&include_all_commits=true" />
569
+ <img width="100%" height="180em" src="https://github-readme-stats.vercel.app/api?username=example&show_icons=true&hide_border=true&&count_private=true&include_all_commits=true" />
560
570
 
561
- ![GitHub followers](https://img.shields.io/github/followers/Knucklessg1)
562
- ![GitHub User's stars](https://img.shields.io/github/stars/Knucklessg1)
571
+ ![GitHub followers](https://img.shields.io/github/followers/example)
572
+ ![GitHub User's stars](https://img.shields.io/github/stars/example)
563
573
 
564
574
  ---
565
575
 
566
576
  ## Contribute
567
577
 
568
- Contributions are welcome! Please ensure code quality by executing local checks before submitting pull requests:
578
+ Contributions are welcome! Please ensure code quality by running local checks before submitting pull requests:
569
579
  - Format code using `ruff format .`
570
580
  - Lint code using `ruff check .`
571
581
  - Validate type-safety with `mypy .`
572
- - Execute test suites using `pytest`
582
+ - Ran test suites using `pytest`
573
583
 
574
584
 
575
585
  <!-- BEGIN agent-os-genesis-deploy (generated; do not edit between markers) -->
@@ -586,9 +596,47 @@ to just this package. Ask your agent to **"deploy `nextcloud-agent` with agent-o
586
596
  |------|---------|
587
597
  | Bare-metal, prod (PyPI) | `uvx nextcloud-mcp` · or `uv tool install nextcloud-agent` |
588
598
  | Bare-metal, dev (editable) | `uv pip install -e ".[all]"` · or `pip install -e ".[all]"` |
589
- | Container, prod | deploy `knucklessg1/nextcloud-agent:latest` via docker-compose / swarm / podman / podman-compose / kubernetes |
599
+ | Container, prod | deploy `knucklessg1/nextcloud-agent:2.3.2` via docker-compose / swarm / podman / podman-compose / kubernetes |
590
600
  | Container, dev (editable) | deploy `docker/compose.dev.yml` (source-mounted at `/src`; edits live on restart) |
591
601
 
592
602
  Secrets are read-existing + seeded via `vault_sync` — you are only prompted for what's missing.
593
603
 
594
604
  <!-- END agent-os-genesis-deploy -->
605
+
606
+ <!-- BEGIN agent-connector-sdk-deployment (generated; do not edit between markers) -->
607
+
608
+ ## Deploy with `agent-connector-sdk-deployment`
609
+
610
+ Provision this package with the consolidated **`agent-connector-sdk-deployment`**
611
+ workflow. It selects an installed-package, editable-source, or immutable-container
612
+ path; records only runtime secret and TLS-profile references in `AgentConfig`; and
613
+ runs doctor, registration, policy, observability, and rollback gates. Ask your agent
614
+ to **"deploy `nextcloud-agent` with agent-connector-sdk-deployment"**.
615
+
616
+ | Install mode | Command |
617
+ |------|---------|
618
+ | Installed package | `uv tool install "nextcloud-agent[mcp]"`, then run `nextcloud-mcp` |
619
+ | Editable source | `uv pip install -e ".[agent]"`, then run `nextcloud-mcp` |
620
+ | Immutable container | deploy `knucklessg1/nextcloud-agent:2.3.2` (or a pinned `@sha256:<digest>`) through the operator-selected orchestrator |
621
+
622
+ The repository embeds no deployment profile, credential value, certificate path, or
623
+ environment-specific endpoint. Supply those at runtime through `AgentConfig` and the
624
+ configured secret provider.
625
+
626
+ <!-- END agent-connector-sdk-deployment -->
627
+
628
+ <!-- GOVERNED-CAPABILITY:START -->
629
+ ## Governed capability contract
630
+
631
+ This package ships a compact canonical skill surface with specialist procedures
632
+ kept as referenced workflows. The current MCP tools, skill metadata,
633
+ `connector_manifest.yml`, ontology, mappings, shapes, fixtures, migrations,
634
+ tool-schema fingerprints, and certification metadata form one versioned
635
+ capability contract. Validate them together; do not rely on stale tool names or
636
+ historical per-task skill wrappers.
637
+
638
+ Runtime endpoints, credentials, certificate trust, tenant identity, retention,
639
+ and observability policy are deployment inputs and are never packaged values.
640
+ See [Configuration, trust, and privacy](docs/configuration.md) before enabling a
641
+ network transport, connector ingestion, Arbora delegation, or trace export.
642
+ <!-- GOVERNED-CAPABILITY:END -->