Resolves https://linear.app/arcadedev/issue/TOO-590/add-resources-support-to-server-framework <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Adds new resource registration/reading semantics (including URI templates and duplicate/multiple-match policies) and changes JSON Schema generation for tool I/O, which may affect MCP client compatibility and runtime behavior across servers. > > **Overview** > **Adds first-class MCP Resources support across `arcade-mcp-server`.** `MCPApp` can now register resources at build time via `add_resource`/`@resource` plus convenience `add_text_resource` and `add_file_resource`, and passes these through to `MCPServer` for startup loading (including `ResourceTemplate` URIs with `{param}` and `{param*}` matching). > > **Extends `ResourceManager` behavior.** Resource reads now coerce handler return types (including raw `bytes` to base64 `BlobResourceContents`), support template matching with overlap/multiple-match detection, and introduce configurable duplicate handling policies. > > **Improves tool schema + MCP Apps linking.** Tool input/output JSON Schema generation is refactored to recursively expand nested `json` schemas and ensure `outputSchema` is always an object (wrapping non-object returns in a `result` property); `MCPApp` also supports attaching arbitrary tool `_meta` extensions (e.g., `ui.resourceUri`) applied at server start. > > Adds two new example servers (`resources`, `tools_with_output_schema`) and broad test coverage for resource templates, static/file resources, meta extensions, and schema wrapping/recursion. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e785bee79d74110727519b00b81dcad6e9b74212. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
44 lines
1.2 KiB
TOML
44 lines
1.2 KiB
TOML
[project]
|
|
name = "resources"
|
|
version = "0.1.0"
|
|
description = "Example MCP server showcasing resource features (static, file-backed, templates, annotations)"
|
|
requires-python = ">=3.10"
|
|
dependencies = [
|
|
"arcade-mcp-server>=1.19.0,<2.0.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"arcade-mcp[all]>=1.12.1,<2.0.0",
|
|
"pytest>=7.0.0",
|
|
"pytest-asyncio>=0.21.0",
|
|
"mypy>=1.0.0",
|
|
"ruff>=0.1.0",
|
|
]
|
|
|
|
# Tell Arcade.dev that this package has Arcade tools
|
|
[project.entry-points.arcade_toolkits]
|
|
toolkit_name = "resources"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/resources"]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py312"
|
|
|
|
[tool.mypy]
|
|
python_version = "3.12"
|
|
warn_unused_configs = true
|
|
disallow_untyped_defs = false
|
|
|
|
# Uncomment the following if you are developing inside of the arcade-mcp repo & want to use editable mode
|
|
# Otherwise, you will install the following packages from PyPI
|
|
# [tool.uv.sources]
|
|
# arcade-mcp = { path = "../../../", editable = true }
|
|
# arcade-serve = { path = "../../../libs/arcade-serve/", editable = true }
|
|
# arcade-mcp-server = { path = "../../../libs/arcade-mcp-server/", editable = true }
|