nextcloud-agent 2.3.2__tar.gz → 2.3.3__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 (61) hide show
  1. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/PKG-INFO +11 -11
  2. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/README.md +7 -7
  3. nextcloud_agent-2.3.3/nextcloud_agent/__init__.py +1 -0
  4. nextcloud_agent-2.3.3/nextcloud_agent/connector_sources.py +114 -0
  5. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/mcp_server.py +1 -1
  6. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/certification.json +0 -3
  7. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/nextcloud.ttl +10 -11
  8. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/prompts/file_steward.json +0 -2
  9. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/PKG-INFO +11 -11
  10. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/SOURCES.txt +1 -2
  11. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/entry_points.txt +0 -3
  12. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/requires.txt +3 -3
  13. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/pyproject.toml +4 -7
  14. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_fleet_name.py +2 -13
  15. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_kg_ingest.py +2 -2
  16. nextcloud_agent-2.3.2/nextcloud_agent/__init__.py +0 -1
  17. nextcloud_agent-2.3.2/nextcloud_agent/connectors/mcp_source_presets.json +0 -14
  18. nextcloud_agent-2.3.2/nextcloud_agent/connectors/tool_schema_fingerprints.json +0 -8
  19. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/LICENSE +0 -0
  20. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/__main__.py +0 -0
  21. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/__init__.py +0 -0
  22. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_base.py +0 -0
  23. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_calendar.py +0 -0
  24. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_contacts.py +0 -0
  25. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_files.py +0 -0
  26. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/xml_security.py +0 -0
  27. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api_client.py +0 -0
  28. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/auth.py +0 -0
  29. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/connectors/__init__.py +0 -0
  30. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/kg_ingest.py +0 -0
  31. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/mcp_config.json +0 -0
  32. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/__init__.py +0 -0
  33. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/fixtures/records.json +0 -0
  34. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/mappings/source.yaml +0 -0
  35. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/migrations/manifest.json +0 -0
  36. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/shapes/connector.shacl.ttl +0 -0
  37. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/prompts/__init__.py +0 -0
  38. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/__init__.py +0 -0
  39. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-agent-operations/SKILL.md +0 -0
  40. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-agent-operations/agents/openai.yaml +0 -0
  41. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-agent-operations/references/catalog.md +0 -0
  42. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-files/SKILL.md +0 -0
  43. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-files/WORKFLOW.md +0 -0
  44. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-ingest/SKILL.md +0 -0
  45. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-ingest/WORKFLOW.md +0 -0
  46. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-shares/SKILL.md +0 -0
  47. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-shares/WORKFLOW.md +0 -0
  48. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/dependency_links.txt +0 -0
  49. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/top_level.txt +0 -0
  50. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/scripts/security_sanitizer.py +0 -0
  51. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/scripts/verify_api_integration.py +0 -0
  52. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/setup.cfg +0 -0
  53. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/conftest.py +0 -0
  54. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_api_client.py +0 -0
  55. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_auth.py +0 -0
  56. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_cli_server.py +0 -0
  57. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_default_content_surfaces.py +0 -0
  58. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_init.py +0 -0
  59. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_init_dynamics.py +0 -0
  60. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_mcp_server.py +0 -0
  61. {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_xml_security.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextcloud-agent
3
- Version: 2.3.2
3
+ Version: 2.3.3
4
4
  Summary: Nextcloud MCP Server for Agentic AI!
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,16 +12,16 @@ 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.18
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
16
16
  Requires-Dist: requests>=2.34.2
17
17
  Requires-Dist: defusedxml>=0.7.1
18
18
  Requires-Dist: python-dateutil>=2.9.0.post0
19
19
  Requires-Dist: icalendar>=7.3.0
20
20
  Requires-Dist: vobject>=0.9.9
21
21
  Provides-Extra: mcp
22
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
22
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
23
23
  Provides-Extra: all
24
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "all"
24
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "all"
25
25
  Provides-Extra: test
26
26
  Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
27
27
  Requires-Dist: pytest>=9.1.1; extra == "test"
@@ -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: 2.3.2*
54
+ *Version: 2.3.3*
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
@@ -353,7 +353,7 @@ services:
353
353
  max-file: "3"
354
354
 
355
355
  nextcloud-agent-agent:
356
- image: knucklessg1/nextcloud-agent:2.3.2
356
+ image: knucklessg1/nextcloud-agent:2.3.3
357
357
  container_name: nextcloud-agent-agent
358
358
  hostname: nextcloud-agent-agent
359
359
  restart: always
@@ -524,15 +524,15 @@ One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `
524
524
  | Image tag | Build target | Contents | Entrypoint |
525
525
  |-----------|--------------|----------|------------|
526
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` |
527
+ | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
528
528
 
529
529
  ```bash
530
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
531
+ docker build --target agent -t knucklessg1/nextcloud-agent:2.3.3 docker/ # agent runtime
532
532
  ```
533
533
 
534
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.
535
+ agent (`:2.3.3`) with a co-located `:mcp` sidecar.
536
536
 
537
537
  ### Knowledge-graph database (`epistemic-graph`)
538
538
 
@@ -596,7 +596,7 @@ to just this package. Ask your agent to **"deploy `nextcloud-agent` with agent-o
596
596
  |------|---------|
597
597
  | Bare-metal, prod (PyPI) | `uvx nextcloud-mcp` · or `uv tool install nextcloud-agent` |
598
598
  | Bare-metal, dev (editable) | `uv pip install -e ".[all]"` · or `pip install -e ".[all]"` |
599
- | Container, prod | deploy `knucklessg1/nextcloud-agent:2.3.2` via docker-compose / swarm / podman / podman-compose / kubernetes |
599
+ | Container, prod | deploy `knucklessg1/nextcloud-agent:2.3.3` via docker-compose / swarm / podman / podman-compose / kubernetes |
600
600
  | Container, dev (editable) | deploy `docker/compose.dev.yml` (source-mounted at `/src`; edits live on restart) |
601
601
 
602
602
  Secrets are read-existing + seeded via `vault_sync` — you are only prompted for what's missing.
@@ -617,7 +617,7 @@ to **"deploy `nextcloud-agent` with agent-connector-sdk-deployment"**.
617
617
  |------|---------|
618
618
  | Installed package | `uv tool install "nextcloud-agent[mcp]"`, then run `nextcloud-mcp` |
619
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 |
620
+ | Immutable container | deploy `knucklessg1/nextcloud-agent:2.3.3` (or a pinned `@sha256:<digest>`) through the operator-selected orchestrator |
621
621
 
622
622
  The repository embeds no deployment profile, credential value, certificate path, or
623
623
  environment-specific endpoint. Supply those at runtime through `AgentConfig` and the
@@ -20,7 +20,7 @@
20
20
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/nextcloud-agent)
21
21
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/nextcloud-agent)
22
22
 
23
- *Version: 2.3.2*
23
+ *Version: 2.3.3*
24
24
 
25
25
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
26
26
  > interfaces, and guidance for provisioning the backing Nextcloud instance are
@@ -322,7 +322,7 @@ services:
322
322
  max-file: "3"
323
323
 
324
324
  nextcloud-agent-agent:
325
- image: knucklessg1/nextcloud-agent:2.3.2
325
+ image: knucklessg1/nextcloud-agent:2.3.3
326
326
  container_name: nextcloud-agent-agent
327
327
  hostname: nextcloud-agent-agent
328
328
  restart: always
@@ -493,15 +493,15 @@ One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `
493
493
  | Image tag | Build target | Contents | Entrypoint |
494
494
  |-----------|--------------|----------|------------|
495
495
  | `knucklessg1/nextcloud-agent:mcp` | `--target mcp` | `nextcloud-agent[mcp]` — **connector-focused**, includes `epistemic-graph[full]`; no model-orchestration stack | `nextcloud-mcp` |
496
- | `knucklessg1/nextcloud-agent:2.3.2` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
496
+ | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
497
497
 
498
498
  ```bash
499
499
  docker build --target mcp -t knucklessg1/nextcloud-agent:mcp docker/ # connector-focused MCP server
500
- docker build --target agent -t knucklessg1/nextcloud-agent:2.3.2 docker/ # agent runtime
500
+ docker build --target agent -t knucklessg1/nextcloud-agent:2.3.3 docker/ # agent runtime
501
501
  ```
502
502
 
503
503
  `docker/mcp.compose.yml` runs the connector-focused `:mcp` server; `docker/agent.compose.yml` runs the
504
- agent (`:2.3.2`) with a co-located `:mcp` sidecar.
504
+ agent (`:2.3.3`) with a co-located `:mcp` sidecar.
505
505
 
506
506
  ### Knowledge-graph database (`epistemic-graph`)
507
507
 
@@ -565,7 +565,7 @@ to just this package. Ask your agent to **"deploy `nextcloud-agent` with agent-o
565
565
  |------|---------|
566
566
  | Bare-metal, prod (PyPI) | `uvx nextcloud-mcp` · or `uv tool install nextcloud-agent` |
567
567
  | Bare-metal, dev (editable) | `uv pip install -e ".[all]"` · or `pip install -e ".[all]"` |
568
- | Container, prod | deploy `knucklessg1/nextcloud-agent:2.3.2` via docker-compose / swarm / podman / podman-compose / kubernetes |
568
+ | Container, prod | deploy `knucklessg1/nextcloud-agent:2.3.3` via docker-compose / swarm / podman / podman-compose / kubernetes |
569
569
  | Container, dev (editable) | deploy `docker/compose.dev.yml` (source-mounted at `/src`; edits live on restart) |
570
570
 
571
571
  Secrets are read-existing + seeded via `vault_sync` — you are only prompted for what's missing.
@@ -586,7 +586,7 @@ to **"deploy `nextcloud-agent` with agent-connector-sdk-deployment"**.
586
586
  |------|---------|
587
587
  | Installed package | `uv tool install "nextcloud-agent[mcp]"`, then run `nextcloud-mcp` |
588
588
  | Editable source | `uv pip install -e ".[agent]"`, then run `nextcloud-mcp` |
589
- | Immutable container | deploy `knucklessg1/nextcloud-agent:2.3.2` (or a pinned `@sha256:<digest>`) through the operator-selected orchestrator |
589
+ | Immutable container | deploy `knucklessg1/nextcloud-agent:2.3.3` (or a pinned `@sha256:<digest>`) through the operator-selected orchestrator |
590
590
 
591
591
  The repository embeds no deployment profile, credential value, certificate path, or
592
592
  environment-specific endpoint. Supply those at runtime through `AgentConfig` and the
@@ -0,0 +1 @@
1
+ __version__ = "2.3.3"
@@ -0,0 +1,114 @@
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 = "nextcloud-mcp"
15
+
16
+ SOURCES: tuple[Any, ...] = (
17
+ source_meta(
18
+ tool="nextcloud_list_files",
19
+ source_id="nextcloud-files",
20
+ record_type="File",
21
+ id_field="file_id",
22
+ cursor_field="last_modified",
23
+ preset={
24
+ "doc_type": "file",
25
+ "params_style": "args",
26
+ },
27
+ records_path="",
28
+ server="nextcloud-mcp",
29
+ text_field="name",
30
+ title_field="name",
31
+ ),
32
+ )
33
+
34
+ SCHEMA_MAPPINGS: dict[str, Any] = {
35
+ "CalendarEvent": {
36
+ "fields": {
37
+ "mimeType": "xsd:string",
38
+ "modifiedAt": "xsd:string",
39
+ "path": "xsd:string",
40
+ "sizeBytes": "xsd:integer",
41
+ },
42
+ "ontology_class": "Event",
43
+ },
44
+ "File": {
45
+ "fields": {
46
+ "mimeType": "xsd:string",
47
+ "modifiedAt": "xsd:string",
48
+ "path": "xsd:string",
49
+ "sizeBytes": "xsd:integer",
50
+ },
51
+ "ontology_class": "File",
52
+ },
53
+ "Folder": {
54
+ "fields": {
55
+ "mimeType": "xsd:string",
56
+ "modifiedAt": "xsd:string",
57
+ "path": "xsd:string",
58
+ "sizeBytes": "xsd:integer",
59
+ },
60
+ "ontology_class": None,
61
+ },
62
+ "Share": {
63
+ "fields": {
64
+ "mimeType": "xsd:string",
65
+ "modifiedAt": "xsd:string",
66
+ "path": "xsd:string",
67
+ "sizeBytes": "xsd:integer",
68
+ },
69
+ "ontology_class": None,
70
+ },
71
+ }
72
+
73
+ RESOURCES: tuple[dict[str, str], ...] = (
74
+ {
75
+ "id_prefix": "calendarevent",
76
+ "label": "Calendar Event",
77
+ "name": "CalendarEvent",
78
+ },
79
+ {
80
+ "id_prefix": "file",
81
+ "label": "Nextcloud File",
82
+ "name": "File",
83
+ },
84
+ {
85
+ "id_prefix": "folder",
86
+ "label": "Nextcloud Folder",
87
+ "name": "Folder",
88
+ },
89
+ {
90
+ "id_prefix": "share",
91
+ "label": "Nextcloud Share",
92
+ "name": "Share",
93
+ },
94
+ )
95
+
96
+
97
+ def declaration() -> IngestSourceDeclaration:
98
+ """The declaration the server assembles from this module."""
99
+ specs: list[IngestSourceSpec] = []
100
+ for item in SOURCES:
101
+ for entry in item["connector_sources"]:
102
+ body: dict[str, Any] = {
103
+ k: v for k, v in entry.items() if k not in ("tool", "mapping")
104
+ }
105
+ spec = {**body, "tools": (entry["tool"],)}
106
+ specs.append(IngestSourceSpec.model_validate(spec))
107
+ return IngestSourceDeclaration.model_validate(
108
+ {
109
+ "connector": CONNECTOR,
110
+ "sources": specs,
111
+ "schema_mappings": SCHEMA_MAPPINGS,
112
+ "resources": RESOURCES,
113
+ }
114
+ )
@@ -34,7 +34,7 @@ from starlette.responses import JSONResponse
34
34
  from nextcloud_agent.api_client import NextcloudAPI
35
35
  from nextcloud_agent.auth import get_client
36
36
 
37
- __version__ = "2.3.2"
37
+ __version__ = "2.3.3"
38
38
 
39
39
  logger = get_logger(name="nextcloud-agent")
40
40
  logger.setLevel(logging.INFO)
@@ -1,9 +1,6 @@
1
1
  {
2
2
  "api_version": "arbora.io/v1",
3
3
  "artifacts": {
4
- "connector_manifest.yml": "3ce0f7ad3717ff79b1a269b91f29f09159309cdadc3663daa22e982b18b85a41",
5
- "nextcloud_agent/connectors/mcp_source_presets.json": "c414c7c710127203405dd518135916111e0b2f197f4e4edcc25588c0d281f8ce",
6
- "nextcloud_agent/connectors/tool_schema_fingerprints.json": "f1b99eb4cb9c36df8c61b3beb915c95c45204cbca82de59098c0bcc2f9c814ec",
7
4
  "nextcloud_agent/ontology/fixtures/records.json": "aeff7048eae4bc5068dcd2070ad0f0e02b1de63bf9fd5dbecf6a51c5ebd26dc7",
8
5
  "nextcloud_agent/ontology/mappings/source.yaml": "eac08da9aa72d040d223652f0d55ec6b3847527630fde0291601e1b77b216739",
9
6
  "nextcloud_agent/ontology/migrations/manifest.json": "25716b991f14c59cc202177dfa6d410b396e18a5c9accc92238e5433825535e7",
@@ -14,21 +14,18 @@
14
14
  # :AssetOccurrence / :Blob / :Document are defined by the hub base ontology and are only
15
15
  # REFERENCED here (never redefined).
16
16
 
17
- :File a owl:Class ;
18
- rdfs:label "Nextcloud File" ;
19
- rdfs:comment "A file stored in Nextcloud (WebDAV resource). Carries its raw bytes as a :AssetOccurrence/:Blob via :hasBlob and its extracted text as a :Document (nextcloud_files read_file)." .
17
+ :File a owl:Class .
18
+
19
+
20
+ :Folder a owl:Class .
20
21
 
21
- :Folder a owl:Class ;
22
- rdfs:label "Nextcloud Folder" ;
23
- rdfs:comment "A WebDAV collection (directory) that contains files and subfolders (nextcloud_files list_files)." .
24
22
 
25
23
  :Share a owl:Class ;
26
24
  rdfs:label "Nextcloud Share" ;
27
25
  rdfs:comment "A sharing grant on a file or folder — public link, user, or group (nextcloud_sharing list_shares)." .
28
26
 
29
- :CalendarEvent a owl:Class ;
30
- rdfs:label "Calendar Event" ;
31
- rdfs:comment "A CalDAV calendar event (.ics) hosted in Nextcloud (nextcloud_calendar list_calendar_events)." .
27
+ :CalendarEvent a owl:Class .
28
+
32
29
 
33
30
  # --- links (owl:ObjectProperty) ---
34
31
 
@@ -88,5 +85,7 @@
88
85
  rdfs:comment """Nextcloud file-storage and collaboration model — files, folders, shares
89
86
  and calendar events over WebDAV/CalDAV — federated into the agent-connector-sdk
90
87
  knowledge-graph hub. Files carry their raw bytes as federated :AssetOccurrence/:Blob
91
- (via :hasBlob) and their extracted text as federated :Document nodes.""" ;
92
- owl:imports <http://knuckles.team/kg> .
88
+ (via :hasBlob) and their extracted text as federated :Document nodes.""" .
89
+
90
+ # ontology-codemod R4
91
+ <http://knuckles.team/kg#Share> rdfs:subClassOf <http://knuckles.team/kg#Resource> .
@@ -4,8 +4,6 @@
4
4
  "schema_version": "1.0",
5
5
  "prompt_version": "0.1.0",
6
6
  "source": "nextcloud-agent",
7
- "extends": "agent-connector-sdk:base",
8
- "compose": "append",
9
7
  "description": "Nextcloud file steward: browse, share, and natively ingest files and folders into the knowledge graph over the nextcloud-agent MCP server.",
10
8
  "metadata": {
11
9
  "topic": "Nextcloud file stewardship",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextcloud-agent
3
- Version: 2.3.2
3
+ Version: 2.3.3
4
4
  Summary: Nextcloud MCP Server for Agentic AI!
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,16 +12,16 @@ 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.18
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
16
16
  Requires-Dist: requests>=2.34.2
17
17
  Requires-Dist: defusedxml>=0.7.1
18
18
  Requires-Dist: python-dateutil>=2.9.0.post0
19
19
  Requires-Dist: icalendar>=7.3.0
20
20
  Requires-Dist: vobject>=0.9.9
21
21
  Provides-Extra: mcp
22
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
22
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
23
23
  Provides-Extra: all
24
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "all"
24
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "all"
25
25
  Provides-Extra: test
26
26
  Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
27
27
  Requires-Dist: pytest>=9.1.1; extra == "test"
@@ -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: 2.3.2*
54
+ *Version: 2.3.3*
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
@@ -353,7 +353,7 @@ services:
353
353
  max-file: "3"
354
354
 
355
355
  nextcloud-agent-agent:
356
- image: knucklessg1/nextcloud-agent:2.3.2
356
+ image: knucklessg1/nextcloud-agent:2.3.3
357
357
  container_name: nextcloud-agent-agent
358
358
  hostname: nextcloud-agent-agent
359
359
  restart: always
@@ -524,15 +524,15 @@ One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `
524
524
  | Image tag | Build target | Contents | Entrypoint |
525
525
  |-----------|--------------|----------|------------|
526
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` |
527
+ | `knucklessg1/nextcloud-agent:2.3.3` | `--target agent` (default) | `nextcloud-agent[agent]` — **agent runtime**, model orchestration + `epistemic-graph[full]` | `nextcloud-agent` |
528
528
 
529
529
  ```bash
530
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
531
+ docker build --target agent -t knucklessg1/nextcloud-agent:2.3.3 docker/ # agent runtime
532
532
  ```
533
533
 
534
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.
535
+ agent (`:2.3.3`) with a co-located `:mcp` sidecar.
536
536
 
537
537
  ### Knowledge-graph database (`epistemic-graph`)
538
538
 
@@ -596,7 +596,7 @@ to just this package. Ask your agent to **"deploy `nextcloud-agent` with agent-o
596
596
  |------|---------|
597
597
  | Bare-metal, prod (PyPI) | `uvx nextcloud-mcp` · or `uv tool install nextcloud-agent` |
598
598
  | Bare-metal, dev (editable) | `uv pip install -e ".[all]"` · or `pip install -e ".[all]"` |
599
- | Container, prod | deploy `knucklessg1/nextcloud-agent:2.3.2` via docker-compose / swarm / podman / podman-compose / kubernetes |
599
+ | Container, prod | deploy `knucklessg1/nextcloud-agent:2.3.3` via docker-compose / swarm / podman / podman-compose / kubernetes |
600
600
  | Container, dev (editable) | deploy `docker/compose.dev.yml` (source-mounted at `/src`; edits live on restart) |
601
601
 
602
602
  Secrets are read-existing + seeded via `vault_sync` — you are only prompted for what's missing.
@@ -617,7 +617,7 @@ to **"deploy `nextcloud-agent` with agent-connector-sdk-deployment"**.
617
617
  |------|---------|
618
618
  | Installed package | `uv tool install "nextcloud-agent[mcp]"`, then run `nextcloud-mcp` |
619
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 |
620
+ | Immutable container | deploy `knucklessg1/nextcloud-agent:2.3.3` (or a pinned `@sha256:<digest>`) through the operator-selected orchestrator |
621
621
 
622
622
  The repository embeds no deployment profile, credential value, certificate path, or
623
623
  environment-specific endpoint. Supply those at runtime through `AgentConfig` and the
@@ -5,6 +5,7 @@ nextcloud_agent/__init__.py
5
5
  nextcloud_agent/__main__.py
6
6
  nextcloud_agent/api_client.py
7
7
  nextcloud_agent/auth.py
8
+ nextcloud_agent/connector_sources.py
8
9
  nextcloud_agent/kg_ingest.py
9
10
  nextcloud_agent/mcp_config.json
10
11
  nextcloud_agent/mcp_server.py
@@ -21,8 +22,6 @@ nextcloud_agent/api/api_client_contacts.py
21
22
  nextcloud_agent/api/api_client_files.py
22
23
  nextcloud_agent/api/xml_security.py
23
24
  nextcloud_agent/connectors/__init__.py
24
- nextcloud_agent/connectors/mcp_source_presets.json
25
- nextcloud_agent/connectors/tool_schema_fingerprints.json
26
25
  nextcloud_agent/ontology/__init__.py
27
26
  nextcloud_agent/ontology/certification.json
28
27
  nextcloud_agent/ontology/nextcloud.ttl
@@ -10,8 +10,5 @@ nextcloud-agent = nextcloud_agent.prompts
10
10
  [agent_connector_sdk.skill_providers]
11
11
  nextcloud-agent = nextcloud_agent.skills
12
12
 
13
- [agent_connector_sdk.source_connector_providers]
14
- nextcloud-agent = nextcloud_agent.connectors
15
-
16
13
  [console_scripts]
17
14
  nextcloud-mcp = nextcloud_agent.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
  requests>=2.34.2
3
3
  defusedxml>=0.7.1
4
4
  python-dateutil>=2.9.0.post0
@@ -6,10 +6,10 @@ icalendar>=7.3.0
6
6
  vobject>=0.9.9
7
7
 
8
8
  [all]
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
  [mcp]
12
- agent-connector-sdk[mcp]<1.0.0,>=0.3.18
12
+ agent-connector-sdk[mcp]<1.0.0,>=0.4.1
13
13
 
14
14
  [test]
15
15
  pytest-xdist>=3.8.0
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nextcloud-agent"
7
- version = "2.3.2"
7
+ version = "2.3.3"
8
8
  description = "Nextcloud MCP Server for Agentic AI!"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 3 - Alpha", "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.18,<1.0.0", "requests>=2.34.2", "defusedxml>=0.7.1", "python-dateutil>=2.9.0.post0", "icalendar>=7.3.0", "vobject>=0.9.9",]
12
+ dependencies = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0", "requests>=2.34.2", "defusedxml>=0.7.1", "python-dateutil>=2.9.0.post0", "icalendar>=7.3.0", "vobject>=0.9.9",]
13
13
  [[project.authors]]
14
14
  name = "Project Maintainers"
15
15
  email = "maintainers@users.noreply.github.com"
@@ -21,8 +21,8 @@ text = "MIT"
21
21
  nextcloud-mcp = "nextcloud_agent.mcp_server:mcp_server"
22
22
 
23
23
  [project.optional-dependencies]
24
- mcp = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",]
25
- all = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",]
24
+ mcp = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0",]
25
+ all = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0",]
26
26
  test = [
27
27
  "pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0",]
28
28
 
@@ -32,9 +32,6 @@ nextcloud-agent = "nextcloud_agent.skills"
32
32
  [project.entry-points."agent_connector_sdk.ontology_providers"]
33
33
  nextcloud-agent = "nextcloud_agent.ontology"
34
34
 
35
- [project.entry-points."agent_connector_sdk.source_connector_providers"]
36
- nextcloud-agent = "nextcloud_agent.connectors"
37
-
38
35
  [project.entry-points."agent_connector_sdk.prompt_providers"]
39
36
  nextcloud-agent = "nextcloud_agent.prompts"
40
37
 
@@ -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: "nextcloud_agent"
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("nextcloud_agent") == FLEET
52
41
  for module in sorted(PACKAGE.glob("*.py")):
53
42
  assert all(name == FLEET for name in _call_connectors(module)), module.name
@@ -48,13 +48,13 @@ def ingest():
48
48
  def _node_type(record: Any) -> str:
49
49
  """A real generated ``SourceRecord`` has no bare ``node_type`` field — it's the
50
50
  last segment of ``mapping_reference``
51
- (``manifest:<connector>#schema_mappings/<NodeType>``)."""
51
+ (``connector:<connector>#mappings/<NodeType>``)."""
52
52
  return record.mapping_reference.rsplit("/", 1)[-1]
53
53
 
54
54
 
55
55
  def _rel_name(relationship: Any) -> str:
56
56
  """Likewise, a ``SourceRelationship``'s kind is the last segment of
57
- ``relation_reference`` (``manifest:<connector>#resources/<NodeType>/relations/<kind>``)."""
57
+ ``relation_reference`` (``connector:<connector>#relations/<NodeType>/<kind>``)."""
58
58
  return relationship.relation_reference.rsplit("/", 1)[-1]
59
59
 
60
60
 
@@ -1 +0,0 @@
1
- __version__ = "2.3.2"
@@ -1,14 +0,0 @@
1
- {
2
- "_comment": "Tier-1 mcp_tool source preset(s) for nextcloud-agent (AU-KG.ingest.mcp-tool-connector). Mirrors a Nextcloud folder listing into the KG as file structure nodes via the nextcloud-agent MCP server. Raw file bytes + extracted text are ingested natively by nextcloud_agent.kg_media (blob :AssetOccurrence + :Document) and the nextcloud_ingest_file MCP tool \u2014 richer than this declarative leg. Contributed presets win over the central MCP_TOOL_PRESETS.",
3
- "nextcloud-files": {
4
- "server": "nextcloud-mcp",
5
- "tool": "nextcloud_list_files",
6
- "records_path": "",
7
- "id_field": "file_id",
8
- "title_field": "name",
9
- "text_field": "name",
10
- "updated_field": "last_modified",
11
- "doc_type": "file",
12
- "params_style": "args"
13
- }
14
- }
@@ -1,8 +0,0 @@
1
- {
2
- "algorithm": "agent-connector-sdk:mcp-tool-contract-compat:v2",
3
- "connector": "nextcloud-mcp",
4
- "schema_version": "1",
5
- "tools": {
6
- "nextcloud_list_files": "cdcd91bff7c5187107f922e09905c747f287f6bfb6ed8bbd3a312a1ac719ede6"
7
- }
8
- }
File without changes