Skip to content

Commit 3a78356

Browse files
authored
Merge branch 'main' into ci-remove-highest-resolution
2 parents 38b42a6 + d5edcb3 commit 3a78356

File tree

40 files changed

+468
-444
lines changed

40 files changed

+468
-444
lines changed

.github/dependabot.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "github-actions"
4+
directory: "/"
5+
schedule:
6+
interval: monthly
7+
groups:
8+
github-actions:
9+
patterns:
10+
- "*"

.github/workflows/comment-on-release.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ jobs:
1313
runs-on: ubuntu-latest
1414
steps:
1515
- name: Checkout
16-
uses: actions/checkout@v4
16+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
1717
with:
1818
fetch-depth: 0
1919

2020
- name: Get previous release
2121
id: previous_release
22-
uses: actions/github-script@v7
22+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
2323
with:
2424
script: |
2525
const currentTag = '${{ github.event.release.tag_name }}';
@@ -53,7 +53,7 @@ jobs:
5353
5454
- name: Get merged PRs between releases
5555
id: get_prs
56-
uses: actions/github-script@v7
56+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
5757
with:
5858
script: |
5959
const currentTag = '${{ github.event.release.tag_name }}';
@@ -103,7 +103,7 @@ jobs:
103103
return Array.from(prNumbers);
104104
105105
- name: Comment on PRs
106-
uses: actions/github-script@v7
106+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
107107
with:
108108
script: |
109109
const prNumbers = ${{ steps.get_prs.outputs.result }};

.github/workflows/publish-docs-manually.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ jobs:
99
permissions:
1010
contents: write
1111
steps:
12-
- uses: actions/checkout@v4
12+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
1313
- name: Configure Git Credentials
1414
run: |
1515
git config user.name github-actions[bot]
1616
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
1717
1818
- name: Install uv
19-
uses: astral-sh/setup-uv@v3
19+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
2020
with:
2121
enable-cache: true
2222
version: 0.9.5
2323

2424
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
25-
- uses: actions/cache@v4
25+
- uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
2626
with:
2727
key: mkdocs-material-${{ env.cache_id }}
2828
path: .cache

.github/workflows/publish-pypi.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ jobs:
1010
runs-on: ubuntu-latest
1111
needs: [checks]
1212
steps:
13-
- uses: actions/checkout@v4
13+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
1414

1515
- name: Install uv
16-
uses: astral-sh/setup-uv@v3
16+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
1717
with:
1818
enable-cache: true
1919
version: 0.9.5
@@ -25,7 +25,7 @@ jobs:
2525
run: uv build
2626

2727
- name: Upload artifacts
28-
uses: actions/upload-artifact@v4
28+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
2929
with:
3030
name: release-dists
3131
path: dist/
@@ -44,34 +44,34 @@ jobs:
4444

4545
steps:
4646
- name: Retrieve release distributions
47-
uses: actions/download-artifact@v4
47+
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
4848
with:
4949
name: release-dists
5050
path: dist/
5151

5252
- name: Publish package distributions to PyPI
53-
uses: pypa/gh-action-pypi-publish@release/v1
53+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1
5454

5555
docs-publish:
5656
runs-on: ubuntu-latest
5757
needs: ["pypi-publish"]
5858
permissions:
5959
contents: write
6060
steps:
61-
- uses: actions/checkout@v4
61+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
6262
- name: Configure Git Credentials
6363
run: |
6464
git config user.name github-actions[bot]
6565
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
6666
6767
- name: Install uv
68-
uses: astral-sh/setup-uv@v3
68+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
6969
with:
7070
enable-cache: true
7171
version: 0.9.5
7272

7373
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
74-
- uses: actions/cache@v4
74+
- uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
7575
with:
7676
key: mkdocs-material-${{ env.cache_id }}
7777
path: .cache

.github/workflows/shared.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ jobs:
1313
pre-commit:
1414
runs-on: ubuntu-latest
1515
steps:
16-
- uses: actions/checkout@v5
16+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
1717

18-
- uses: astral-sh/setup-uv@v7
18+
- uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
1919
with:
2020
enable-cache: true
2121
version: 0.9.5
2222
- name: Install dependencies
2323
run: uv sync --frozen --all-extras --python 3.10
2424

25-
- uses: pre-commit/action@v3.0.1
25+
- uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
2626
with:
2727
extra_args: --all-files --verbose
2828
env:
@@ -44,10 +44,10 @@ jobs:
4444
os: [ubuntu-latest, windows-latest]
4545

4646
steps:
47-
- uses: actions/checkout@v5
47+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
4848

4949
- name: Install uv
50-
uses: astral-sh/setup-uv@v7
50+
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
5151
with:
5252
enable-cache: true
5353
version: 0.9.5
@@ -65,9 +65,9 @@ jobs:
6565
readme-snippets:
6666
runs-on: ubuntu-latest
6767
steps:
68-
- uses: actions/checkout@v5
68+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
6969

70-
- uses: astral-sh/setup-uv@v7
70+
- uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
7171
with:
7272
enable-cache: true
7373
version: 0.9.5

.github/workflows/weekly-lockfile-update.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ jobs:
1414
update-lockfile:
1515
runs-on: ubuntu-latest
1616
steps:
17-
- uses: actions/checkout@v5
17+
- uses: actions/checkout@v6.0.1
1818

19-
- uses: astral-sh/setup-uv@v7
19+
- uses: astral-sh/setup-uv@v7.2.0
2020
with:
2121
version: 0.9.5
2222

@@ -29,7 +29,7 @@ jobs:
2929
echo '```' >> pr_body.md
3030
3131
- name: Create pull request
32-
uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7
32+
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v7
3333
with:
3434
commit-message: "chore: update uv.lock with latest dependencies"
3535
title: "chore: weekly dependency update"

CLAUDE.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@ This document contains critical information about working with this codebase. Fo
5151
- NEVER ever mention a `co-authored-by` or similar aspects. In particular, never
5252
mention the tool used to create the commit message or PR.
5353

54+
## Breaking Changes
55+
56+
When making breaking changes, document them in `docs/migration.md`. Include:
57+
58+
- What changed
59+
- Why it changed
60+
- How to migrate existing code
61+
62+
Search for related sections in the migration guide and group related changes together
63+
rather than adding new standalone sections.
64+
5465
## Python Tools
5566

5667
## Code Formatting

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2044,8 +2044,6 @@ For servers that need to handle large datasets, the low-level server provides pa
20442044
Example of implementing pagination with MCP server decorators.
20452045
"""
20462046

2047-
from pydantic import AnyUrl
2048-
20492047
import mcp.types as types
20502048
from mcp.server.lowlevel import Server
20512049

@@ -2070,7 +2068,7 @@ async def list_resources_paginated(request: types.ListResourcesRequest) -> types
20702068

20712069
# Get page of resources
20722070
page_items = [
2073-
types.Resource(uri=AnyUrl(f"resource://items/{item}"), name=item, description=f"Description for {item}")
2071+
types.Resource(uri=f"resource://items/{item}", name=item, description=f"Description for {item}")
20742072
for item in ITEMS[start:end]
20752073
]
20762074

docs/migration.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,49 @@ result = await session.list_resources(params=PaginatedRequestParams(cursor="next
116116
result = await session.list_tools(params=PaginatedRequestParams(cursor="next_page_token"))
117117
```
118118

119+
### Resource URI type changed from `AnyUrl` to `str`
120+
121+
The `uri` field on resource-related types now uses `str` instead of Pydantic's `AnyUrl`. This aligns with the [MCP specification schema](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/draft/schema.ts) which defines URIs as plain strings (`uri: string`) without strict URL validation. This change allows relative paths like `users/me` that were previously rejected.
122+
123+
**Before (v1):**
124+
125+
```python
126+
from pydantic import AnyUrl
127+
from mcp.types import Resource
128+
129+
# Required wrapping in AnyUrl
130+
resource = Resource(name="test", uri=AnyUrl("users/me")) # Would fail validation
131+
```
132+
133+
**After (v2):**
134+
135+
```python
136+
from mcp.types import Resource
137+
138+
# Plain strings accepted
139+
resource = Resource(name="test", uri="users/me") # Works
140+
resource = Resource(name="test", uri="custom://scheme") # Works
141+
resource = Resource(name="test", uri="https://example.com") # Works
142+
```
143+
144+
If your code passes `AnyUrl` objects to URI fields, convert them to strings:
145+
146+
```python
147+
# If you have an AnyUrl from elsewhere
148+
uri = str(my_any_url) # Convert to string
149+
```
150+
151+
Affected types:
152+
153+
- `Resource.uri`
154+
- `ReadResourceRequestParams.uri`
155+
- `ResourceContents.uri` (and subclasses `TextResourceContents`, `BlobResourceContents`)
156+
- `SubscribeRequestParams.uri`
157+
- `UnsubscribeRequestParams.uri`
158+
- `ResourceUpdatedNotificationParams.uri`
159+
160+
The `ClientSession.read_resource()`, `subscribe_resource()`, and `unsubscribe_resource()` methods now accept both `str` and `AnyUrl` for backwards compatibility.
161+
119162
## Deprecations
120163

121164
<!-- Add deprecations below -->

examples/fastmcp/memory.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,7 @@
3737

3838
T = TypeVar("T")
3939

40-
mcp = FastMCP(
41-
"memory",
42-
dependencies=[
43-
"pydantic-ai-slim[openai]",
44-
"asyncpg",
45-
"numpy",
46-
"pgvector",
47-
],
48-
)
40+
mcp = FastMCP("memory")
4941

5042
DB_DSN = "postgresql://postgres:postgres@localhost:54320/memory_db"
5143
# reset memory with rm ~/.fastmcp/{USER}/memory/*

0 commit comments

Comments
 (0)