Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 959cb8b21a | |||
| f8a2410a0a | |||
| 03b984d5a7 |
@@ -1,3 +1,9 @@
|
|||||||
|
## v0.46.2 (2025-11-22)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **smithery**: Enable JSON response format for scanner compatibility
|
||||||
|
|
||||||
## v0.46.1 (2025-11-22)
|
## v0.46.1 (2025-11-22)
|
||||||
|
|
||||||
### Perf
|
### Perf
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
```markdown
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="astrolabe.svg" alt="Nextcloud MCP Server" width="128" height="128">
|
<img src="astrolabe.svg" alt="Nextcloud MCP Server" width="128" height="128">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# Nextcloud MCP Server
|
# Nextcloud MCP Server
|
||||||
|
|
||||||
[](https://smithery.ai/server/@cbcoutinho/nextcloud-mcp-server)
|
|
||||||
[](https://github.com/cbcoutinho/nextcloud-mcp-server/pkgs/container/nextcloud-mcp-server)
|
[](https://github.com/cbcoutinho/nextcloud-mcp-server/pkgs/container/nextcloud-mcp-server)
|
||||||
|
[](https://smithery.ai/server/@cbcoutinho/nextcloud-mcp-server)
|
||||||
|
|
||||||
**A production-ready MCP server that connects AI assistants to your Nextcloud instance.**
|
**A production-ready MCP server that connects AI assistants to your Nextcloud instance.**
|
||||||
|
|
||||||
@@ -224,4 +223,3 @@ This project is licensed under the AGPL-3.0 License. See [LICENSE](./LICENSE) fo
|
|||||||
- [Model Context Protocol](https://github.com/modelcontextprotocol)
|
- [Model Context Protocol](https://github.com/modelcontextprotocol)
|
||||||
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)
|
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)
|
||||||
- [Nextcloud](https://nextcloud.com/)
|
- [Nextcloud](https://nextcloud.com/)
|
||||||
```
|
|
||||||
@@ -2,8 +2,8 @@ apiVersion: v2
|
|||||||
name: nextcloud-mcp-server
|
name: nextcloud-mcp-server
|
||||||
description: A Helm chart for Nextcloud MCP Server - enables AI assistants to interact with Nextcloud
|
description: A Helm chart for Nextcloud MCP Server - enables AI assistants to interact with Nextcloud
|
||||||
type: application
|
type: application
|
||||||
version: 0.46.1
|
version: 0.46.2
|
||||||
appVersion: "0.46.1"
|
appVersion: "0.46.2"
|
||||||
keywords:
|
keywords:
|
||||||
- nextcloud
|
- nextcloud
|
||||||
- mcp
|
- mcp
|
||||||
|
|||||||
@@ -1072,7 +1072,11 @@ def get_app(transport: str = "sse", enabled_apps: list[str] | None = None):
|
|||||||
# ADR-016: Use Smithery lifespan for stateless mode, BasicAuth otherwise
|
# ADR-016: Use Smithery lifespan for stateless mode, BasicAuth otherwise
|
||||||
if deployment_mode == DeploymentMode.SMITHERY_STATELESS:
|
if deployment_mode == DeploymentMode.SMITHERY_STATELESS:
|
||||||
logger.info("Configuring MCP server for Smithery stateless mode")
|
logger.info("Configuring MCP server for Smithery stateless mode")
|
||||||
mcp = FastMCP("Nextcloud MCP", lifespan=app_lifespan_smithery)
|
# json_response=True returns plain JSON-RPC instead of SSE format,
|
||||||
|
# required for Smithery scanner compatibility
|
||||||
|
mcp = FastMCP(
|
||||||
|
"Nextcloud MCP", lifespan=app_lifespan_smithery, json_response=True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
logger.info("Configuring MCP server for BasicAuth mode")
|
logger.info("Configuring MCP server for BasicAuth mode")
|
||||||
mcp = FastMCP("Nextcloud MCP", lifespan=app_lifespan_basic)
|
mcp = FastMCP("Nextcloud MCP", lifespan=app_lifespan_basic)
|
||||||
|
|||||||
@@ -335,27 +335,6 @@ def configure_semantic_tools(mcp: FastMCP):
|
|||||||
Note: Requires MCP client to support sampling. If sampling is unavailable,
|
Note: Requires MCP client to support sampling. If sampling is unavailable,
|
||||||
the tool gracefully degrades to returning documents with an explanation.
|
the tool gracefully degrades to returning documents with an explanation.
|
||||||
The client may prompt the user to approve the sampling request.
|
The client may prompt the user to approve the sampling request.
|
||||||
|
|
||||||
Examples:
|
|
||||||
>>> # Query about objectives across multiple apps
|
|
||||||
>>> result = await nc_semantic_search_answer(
|
|
||||||
... query="What are my Q1 2025 project goals?",
|
|
||||||
... ctx=ctx
|
|
||||||
... )
|
|
||||||
>>> print(result.generated_answer)
|
|
||||||
"Based on Document 1 (note: Project Kickoff), Document 2 (calendar event:
|
|
||||||
Q1 Planning Meeting), and Document 3 (deck card: Implement semantic search),
|
|
||||||
your main goals are: 1) Improve semantic search accuracy by 20%,
|
|
||||||
2) Deploy new embedding model, 3) Reduce indexing latency..."
|
|
||||||
|
|
||||||
>>> # Query about appointments
|
|
||||||
>>> result = await nc_semantic_search_answer(
|
|
||||||
... query="When is my next dentist appointment?",
|
|
||||||
... ctx=ctx,
|
|
||||||
... limit=10
|
|
||||||
... )
|
|
||||||
>>> len(result.sources) # Calendar events and related notes
|
|
||||||
3
|
|
||||||
"""
|
"""
|
||||||
# 1. Retrieve relevant documents via existing semantic search
|
# 1. Retrieve relevant documents via existing semantic search
|
||||||
search_response = await nc_semantic_search(
|
search_response = await nc_semantic_search(
|
||||||
|
|||||||
@@ -64,20 +64,6 @@ def configure_webdav_tools(mcp: FastMCP):
|
|||||||
- Text files are decoded to UTF-8
|
- Text files are decoded to UTF-8
|
||||||
- Documents (PDF, DOCX, etc.) are parsed and text is extracted
|
- Documents (PDF, DOCX, etc.) are parsed and text is extracted
|
||||||
- Other binary files are base64 encoded
|
- Other binary files are base64 encoded
|
||||||
|
|
||||||
Examples:
|
|
||||||
# Read a text file
|
|
||||||
result = await nc_webdav_read_file("Documents/readme.txt")
|
|
||||||
logger.info(result['content']) # Decoded text content
|
|
||||||
|
|
||||||
# Read a PDF document (automatically parsed)
|
|
||||||
result = await nc_webdav_read_file("Documents/report.pdf")
|
|
||||||
logger.info(result['content']) # Extracted text from PDF
|
|
||||||
logger.info(result['parsing_metadata']) # Document parsing info
|
|
||||||
|
|
||||||
# Read a binary file
|
|
||||||
result = await nc_webdav_read_file("Images/photo.jpg")
|
|
||||||
logger.info(result['encoding']) # 'base64'
|
|
||||||
"""
|
"""
|
||||||
client = await get_client(ctx)
|
client = await get_client(ctx)
|
||||||
content, content_type = await client.webdav.read_file(path)
|
content, content_type = await client.webdav.read_file(path)
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "nextcloud-mcp-server"
|
name = "nextcloud-mcp-server"
|
||||||
version = "0.46.1"
|
version = "0.46.2"
|
||||||
description = "Model Context Protocol (MCP) server for Nextcloud integration - enables AI assistants to interact with Nextcloud data"
|
description = "Model Context Protocol (MCP) server for Nextcloud integration - enables AI assistants to interact with Nextcloud data"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "Chris Coutinho", email = "chris@coutinho.io"}
|
{name = "Chris Coutinho", email = "chris@coutinho.io"}
|
||||||
|
|||||||
@@ -1936,7 +1936,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nextcloud-mcp-server"
|
name = "nextcloud-mcp-server"
|
||||||
version = "0.46.1"
|
version = "0.46.2"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "aiosqlite" },
|
{ name = "aiosqlite" },
|
||||||
|
|||||||
Reference in New Issue
Block a user