Skip to content

Commit ea7ea72

Browse files
committed
Merge branch 'chore/add-schema-dereference-middleware' of github.com:vl-kp/fastmcp into chore/add-schema-dereference-middleware
2 parents c7188ef + b5ec2be commit ea7ea72

File tree

384 files changed

+41083
-6502
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

384 files changed

+41083
-6502
lines changed

.github/ISSUE_TEMPLATE/bug.yml

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,20 @@ labels: [bug, pending]
55
body:
66
- type: markdown
77
attributes:
8-
value: Thank you for contributing to FastMCP! 🙏
8+
value: Thanks for contributing to FastMCP! 🙏
9+
10+
- type: markdown
11+
attributes:
12+
value: |
13+
### Before you submit
14+
15+
To help us help you, please:
16+
17+
- 🔄 **Make sure you're testing on the latest version of FastMCP** - many issues are already fixed in newer versions
18+
- 🔍 **Check if someone else has already reported this issue** or if it's been fixed on the main branch
19+
- 📋 **You MUST include a copy/pasteable and properly formatted MRE** (minimal reproducible example) below or your issue may be closed without response
20+
21+
Thanks for helping to make FastMCP better! 🚀
922
1023
- type: textarea
1124
id: description
@@ -25,46 +38,34 @@ body:
2538
description: >
2639
If applicable, please provide a self-contained,
2740
[minimal, reproducible example](https://stackoverflow.com/help/minimal-reproducible-example)
28-
demonstrating the bug.
29-
30-
If possible, your example should be a single-file script. Instead of `.run()`-ing an MCP server, use a `Client` to directly interact with it (`async with Client(mcp) as client: ...`) and demonstrate the issue.
41+
demonstrating the bug. If possible, your example should be a single-file script.
3142
3243
placeholder: |
44+
import asyncio
3345
from fastmcp import FastMCP, Client
3446
3547
mcp = FastMCP()
3648
37-
async with Client(mcp) as client:
38-
...
49+
async def demo():
50+
async with Client(mcp) as client:
51+
... # show the bug here
52+
53+
if __name__ == "__main__":
54+
asyncio.run(demo())
3955
render: Python
4056

4157
- type: textarea
4258
id: version
4359
attributes:
4460
label: Version Information
4561
description: |
46-
Please provide information about your FastMCP version, MCP version, Python version, and OS.
62+
Please tell us about your FastMCP version, MCP version, Python version, and OS, as well as any other relevant details about your environment.
4763
48-
To get this information, run the following command in your terminal and paste the output below:
64+
To get the basic information, run the following command in your terminal and paste the output below:
4965
5066
```bash
5167
fastmcp version --copy
5268
```
53-
54-
*Note: if you're using FastMCP < 2.10.3, run `fastmcp version` instead.*
55-
56-
If there is other information that would be helpful, please include it as well.
5769
render: Text
5870
validations:
5971
required: true
60-
61-
- type: textarea
62-
id: additional_context
63-
attributes:
64-
label: Additional Context
65-
description: |
66-
Add any other context about the problem here. This could include:
67-
- The full error message and traceback (if applicable)
68-
- Information about your environment (e.g., virtual environment, installed packages)
69-
- Steps to reproduce the issue
70-
- Any recent changes in your code or setup that might be relevant

.github/ISSUE_TEMPLATE/enhancement.yml

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,30 @@ labels: [enhancement, pending]
55
body:
66
- type: markdown
77
attributes:
8-
value: Thank you for contributing to FastMCP! We value your ideas for improving the framework. 💡
8+
value: Thanks for contributing to FastMCP! 🙏
9+
10+
- type: markdown
11+
attributes:
12+
value: |
13+
### Before you submit
14+
15+
To help us evaluate your enhancement request:
16+
17+
- 🔍 **Check if this has already been requested** - search existing issues first
18+
- 💭 **Think about the broader impact** - how would this affect other users?
19+
- 📋 **Consider implementation complexity** - is this a small change or a major feature?
20+
21+
Thanks for helping to make FastMCP better! 🚀
922
1023
- type: textarea
1124
id: description
1225
attributes:
13-
label: Enhancement Description
26+
label: Enhancement
1427
description: |
15-
Please describe the enhancement you'd like to see in FastMCP.
28+
Please describe the enhancement:
1629
17-
- What problem would this solve?
18-
- How would this improve your workflow or experience with FastMCP?
30+
- What problem or use case would it solve?
31+
- How would it improve your workflow or experience with FastMCP?
1932
- Are there any alternative solutions you've considered?
2033
validations:
2134
required: true
22-
23-
- type: textarea
24-
id: use_case
25-
attributes:
26-
label: Use Case
27-
description: |
28-
Describe a specific use case or scenario where this enhancement would be beneficial.
29-
If possible, provide an example of how you envision using this feature.
30-
31-
- type: textarea
32-
id: example
33-
attributes:
34-
label: Proposed Implementation
35-
description: >
36-
If you have ideas about how this enhancement could be implemented,
37-
please share them here. Code snippets, pseudocode, or general approaches are welcome.
38-
render: Python

.github/copilot-instructions.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../AGENTS.md

.github/labeler.yml

Lines changed: 0 additions & 33 deletions
This file was deleted.

.github/pull_request_template.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
## Description
2+
<!--
3+
Please provide a clear and concise description of the changes made in this pull request.
4+
5+
Using AI to generate code? Please include a note in the description with which AI tool you used.
6+
-->
7+
8+
**Contributors Checklist**
9+
<!--
10+
NOTE:
11+
1. You must create an issue in the repository before making a Pull Request.
12+
2. You must not create a Pull Request for an issue that is already assigned to someone else.
13+
14+
If you do not follow these steps, your Pull Request will be closed without review.
15+
-->
16+
17+
- [ ] My change is related to issue #(issue number)
18+
- [ ] I have followed the repository's development workflow
19+
- [ ] I have tested my changes manually and by adding relevant tests
20+
- [ ] I have performed all required documentation updates
21+
22+
**Review Checklist**
23+
<!-- Your Pull Request will not be reviewed if tests are failing, you have not self-reviewed your changes, or you have not checked all of the following: -->
24+
25+
- [ ] I have self-reviewed my changes
26+
- [ ] My Pull Request is ready for review
27+
28+
---

.github/release.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,13 @@ changelog:
77
- title: New Features 🎉
88
labels:
99
- feature
10-
exclude:
11-
labels:
12-
- contrib
1310

1411
- title: Enhancements 🔧
1512
labels:
1613
- enhancement
1714
exclude:
1815
labels:
1916
- breaking change
20-
- contrib
2117

2218
- title: Fixes 🐞
2319
labels:
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Auto-close duplicate issues
2+
description: Auto-closes issues that are duplicates of existing issues
3+
on:
4+
schedule:
5+
- cron: "0 9 * * *" # Run daily at 9 AM UTC
6+
workflow_dispatch:
7+
8+
jobs:
9+
auto-close-duplicates:
10+
runs-on: ubuntu-latest
11+
timeout-minutes: 10
12+
permissions:
13+
contents: read
14+
issues: write
15+
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v5
19+
20+
- name: Install uv
21+
uses: astral-sh/setup-uv@v6
22+
23+
- name: Auto-close duplicate issues
24+
run: uv run scripts/auto_close_duplicates.py
25+
env:
26+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27+
GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
28+
GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}

.github/workflows/labeler.yml

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
name: Marvin Issue Dedupe
2+
description: Automatically dedupe GitHub issues using Marvin
3+
on:
4+
issues:
5+
types: [opened]
6+
workflow_dispatch:
7+
inputs:
8+
issue_number:
9+
description: "Issue number to process for duplicate detection"
10+
required: true
11+
type: string
12+
13+
jobs:
14+
marvin-dedupe-issues:
15+
runs-on: ubuntu-latest
16+
timeout-minutes: 10
17+
permissions:
18+
contents: read
19+
issues: write
20+
21+
steps:
22+
- name: Checkout repository
23+
uses: actions/checkout@v5
24+
25+
- name: Generate Marvin App token
26+
id: marvin-token
27+
uses: actions/create-github-app-token@v2
28+
with:
29+
app-id: ${{ secrets.MARVIN_APP_ID }}
30+
private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
31+
32+
- name: Create dedupe prompt
33+
run: |
34+
mkdir -p /tmp/claude-prompts
35+
cat > /tmp/claude-prompts/dedupe-prompt.txt << 'EOF'
36+
Find up to 3 likely duplicate issues for GitHub issue ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}.
37+
38+
Follow these steps precisely:
39+
40+
1. Use the Task tool to check if the GitHub issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed.
41+
42+
2. Use the Task tool to view the GitHub issue, and ask the agent to return a summary of the issue
43+
44+
3. Then, launch 3 parallel agents using the Task tool to search GitHub for duplicates of this issue, using diverse keywords and search approaches, using the summary from step 2
45+
46+
4. Next, feed the results from steps 2 and 3 into another agent using the Task tool, so that it can filter out false positives that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed.
47+
48+
5. Finally, comment back on the issue with a list of up to three duplicate issues (or zero, if there are no likely duplicates). If there are no duplicates, DO NOT COMMENT. Just exit.
49+
50+
Notes for your agents:
51+
- Use `gh` to interact with GitHub, rather than web fetch
52+
- Do not use other tools, beyond `gh` and Task (eg. don't use other MCP servers, file edit, etc.)
53+
- Make a todo list first
54+
55+
For your comment, follow this format precisely (example with 3 suspected duplicates):
56+
57+
---
58+
Found 3 possible duplicate issues:
59+
60+
1. #123: Issue title here
61+
2. #456: Another issue title
62+
3. #789: Third issue title
63+
64+
This issue will be automatically closed as a duplicate in 3 days.
65+
66+
- If your issue is a duplicate, please close it and 👍 the existing issue instead
67+
- To prevent auto-closure, add a comment or 👎 this comment
68+
69+
---
70+
EOF
71+
72+
- name: Run Marvin dedupe command
73+
uses: anthropics/claude-code-base-action@beta
74+
with:
75+
model: claude-3-5-haiku-latest
76+
prompt_file: /tmp/claude-prompts/dedupe-prompt.txt
77+
allowed_tools: "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh api:*),Bash(gh issue comment:*),Task"
78+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
79+
claude_env: |
80+
GH_TOKEN: ${{ steps.marvin-token.outputs.token }}

0 commit comments

Comments
 (0)