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.
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/PKG-INFO +11 -11
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/README.md +7 -7
- nextcloud_agent-2.3.3/nextcloud_agent/__init__.py +1 -0
- nextcloud_agent-2.3.3/nextcloud_agent/connector_sources.py +114 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/mcp_server.py +1 -1
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/certification.json +0 -3
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/nextcloud.ttl +10 -11
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/prompts/file_steward.json +0 -2
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/PKG-INFO +11 -11
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/SOURCES.txt +1 -2
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/entry_points.txt +0 -3
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/requires.txt +3 -3
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/pyproject.toml +4 -7
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_fleet_name.py +2 -13
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_kg_ingest.py +2 -2
- nextcloud_agent-2.3.2/nextcloud_agent/__init__.py +0 -1
- nextcloud_agent-2.3.2/nextcloud_agent/connectors/mcp_source_presets.json +0 -14
- nextcloud_agent-2.3.2/nextcloud_agent/connectors/tool_schema_fingerprints.json +0 -8
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/LICENSE +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/__main__.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/__init__.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_base.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_calendar.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_contacts.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/api_client_files.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api/xml_security.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/api_client.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/auth.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/connectors/__init__.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/kg_ingest.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/mcp_config.json +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/__init__.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/fixtures/records.json +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/mappings/source.yaml +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/migrations/manifest.json +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/shapes/connector.shacl.ttl +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/prompts/__init__.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/__init__.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-agent-operations/SKILL.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-agent-operations/agents/openai.yaml +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-agent-operations/references/catalog.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-files/SKILL.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-files/WORKFLOW.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-ingest/SKILL.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-ingest/WORKFLOW.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-shares/SKILL.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-shares/WORKFLOW.md +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/dependency_links.txt +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/top_level.txt +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/scripts/security_sanitizer.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/scripts/verify_api_integration.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/setup.cfg +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/conftest.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_api_client.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_auth.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_cli_server.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_default_content_surfaces.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_init.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_init_dynamics.py +0 -0
- {nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/tests/test_mcp_server.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|

|
|
52
52
|

|
|
53
53
|
|
|
54
|
-
*Version: 2.3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|

|
|
21
21
|

|
|
22
22
|
|
|
23
|
-
*Version: 2.3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|

|
|
52
52
|

|
|
53
53
|
|
|
54
|
-
*Version: 2.3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
25
|
-
all = [ "agent-connector-sdk[mcp]>=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
|
-
|
|
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
|
-
(``
|
|
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`` (``
|
|
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
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/fixtures/records.json
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/mappings/source.yaml
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/migrations/manifest.json
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/ontology/shapes/connector.shacl.ttl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-files/SKILL.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-files/WORKFLOW.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-ingest/SKILL.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-ingest/WORKFLOW.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-shares/SKILL.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent/skills/nextcloud-shares/WORKFLOW.md
RENAMED
|
File without changes
|
{nextcloud_agent-2.3.2 → nextcloud_agent-2.3.3}/nextcloud_agent.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|