Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d73f99efbf |
||
|
|
1ec570c27d |
||
|
|
f41b666edf |
||
|
|
c3d8e43d1f |
||
|
|
abbbddb2e3 |
||
|
|
649af5856e |
||
|
|
242751e8ee |
||
|
|
ba167cef5b |
||
|
|
48723c95dc |
||
|
|
96c49c7364 |
||
|
|
cce08de417 |
||
|
|
2e3e4c7ab7 |
||
|
|
3aa19f5574 |
||
|
|
579c3903f3 |
||
|
|
a6cdbf4dea |
||
|
|
ebaccfd623 |
||
|
|
cda92bdaac |
||
|
|
d6402efee6 |
||
|
|
40a8de87ed |
||
|
|
11845d51cb |
||
|
|
cf05b37694 |
||
|
|
642a9112e7 |
||
|
|
18ce197639 |
||
|
|
562feeb281 |
||
|
|
71e3cfbd1e |
||
|
|
781a93db14 |
||
|
|
8102fbe27a |
||
|
|
599dafc105 |
||
|
|
d811ba11f1 | ||
|
|
53dbe83b7a | ||
|
|
76d64c822f |
||
|
|
1cd1096d29 |
||
|
|
d8cff7f016 |
||
|
|
7112282ce2 |
||
|
|
76639ead0c |
||
|
|
3bcfedd8e4 |
||
|
|
fd8248e56b |
||
|
|
ced1408d3a |
||
|
|
20b5783d3b |
||
|
|
4852bb3fc4 |
||
|
|
10962d3114 |
||
|
|
7bdcdb6a85 |
||
|
|
fab6abed58 |
||
|
|
2e15194d4e |
||
|
|
42a1d825b1 |
||
|
|
40ce2f784e |
||
|
|
31bd12967f |
||
|
|
86b9438e0e |
||
|
|
63df72cb15 | ||
|
|
d31124c982 |
||
|
|
97b70ee252 |
||
|
|
0e30ad18c7 |
||
|
|
f7221c4d02 |
||
|
|
55d256293f |
||
|
|
7097923966 |
||
|
|
5850690363 | ||
|
|
3b9d38fbac | ||
|
|
752985790e | ||
|
|
18f09adae3 | ||
|
|
06a8169e6f | ||
|
|
a714b63b7f | ||
|
|
f2450d7fa4 | ||
|
|
9e9dfb95b5 | ||
|
|
1c0fdc3063 | ||
|
|
f4c86ff964 | ||
|
|
dab3489b73 | ||
|
|
4307b95aee | ||
|
|
1a4ecb7575 | ||
|
|
a72e93e503 | ||
|
|
b2a94a21a5 |
||
|
|
aa8d20609c | ||
|
|
7b1170d1da |
||
|
|
a96189b2af |
||
|
|
0588ec098e | ||
|
|
275175cda1 |
||
|
|
25e5f3a6e8 |
||
|
|
f5054df1fb |
||
|
|
3a32d1024b |
||
|
|
64b1cb0208 |
||
|
|
9bade64fce |
||
|
|
00ce9cf134 |
||
|
|
ce3b44e21b |
||
|
|
6abf04eef1 | ||
|
|
b1e1eb1a55 |
||
|
|
97ba6b3a65 |
||
|
|
3f40d6e731 | ||
|
|
040b5a96db |
||
|
|
916fa420ec |
||
|
|
acedea0c24 |
||
|
|
ef51b062f6 |
||
|
|
af15c688e4 |
||
|
|
0db9a34071 | ||
|
|
67a71f1b60 | ||
|
|
4503e2d12b |
||
|
|
7e6b7807af |
||
|
|
c3448d71b5 |
||
|
|
74cdb4d867 |
||
|
|
756db5b42a |
||
|
|
bb0a1893e7 |
||
|
|
5d146b379e |
||
|
|
d5bfe349af |
||
|
|
5914f61340 | ||
|
|
bae042b4f2 | ||
|
|
6e320090c0 | ||
|
|
c104a61f87 |
||
|
|
7a8c25d393 |
||
|
|
5150a95309 |
||
|
|
e21dbea731 | ||
|
|
f4244583a6 |
||
|
|
b60eca1b3b |
||
|
|
1cdf806d21 |
||
|
|
c7e0c7e730 |
||
|
|
ae40ec239d |
||
|
|
81f8301cd2 |
||
|
|
c2ee97e792 |
||
|
|
83b22050b8 |
||
|
|
a97aba19eb |
||
|
|
ad3e660cc1 |
||
|
|
6d977ddc62 |
||
|
|
72efc42976 |
||
|
|
04cce79b4c |
||
|
|
599b170e9d |
||
|
|
0e06979028 |
||
|
|
a83b1451c5 |
||
|
|
1b96551ef0 |
||
|
|
6a914b9db8 |
||
|
|
5e3735d081 | ||
|
|
8f8f5be91e |
||
|
|
618cf4867b |
||
|
|
173d991153 |
||
|
|
e3ea3c8b7f |
||
|
|
70c549be69 |
||
|
|
26c0d57d57 | ||
|
|
87a996b548 | ||
|
|
922cc2a329 |
||
|
|
106216491e | ||
|
|
3921f5c041 |
||
|
|
ccf675184e |
||
|
|
ca7ea2253e | ||
|
|
cd20aee6b4 |
||
|
|
0ca9921e20 |
||
|
|
9c0921276c |
||
|
|
f48efe3206 |
||
|
|
93a4f763b6 |
||
|
|
8614dff06f | ||
|
|
10d382798e |
||
|
|
baf99300a2 | ||
|
|
5cb1c6e042 |
||
|
|
6a690065cf |
||
|
|
e95bb9c44b |
||
|
|
760829a778 |
||
|
|
c5df3a4722 |
||
|
|
dd6594c083 | ||
|
|
39a1db9bf2 |
||
|
|
03f276bfe2 |
||
|
|
71d5d71a80 | ||
|
|
e6b0b0f5d3 |
||
|
|
6611260d49 |
||
|
|
80397a9d3b |
||
|
|
b68d67d155 |
||
|
|
a1f9dfa470 |
||
|
|
8f2e9cc678 |
||
|
|
3e1be88c3b | ||
|
|
59e60b5a69 |
||
|
|
549dd025e2 |
||
|
|
e73b9a2f9a | ||
|
|
ae1e7a5500 | ||
|
|
9ade57133f | ||
|
|
eedb060099 |
||
|
|
1542b65154 | ||
|
|
a160653441 |
||
|
|
c20c017171 |
||
|
|
623aa8f459 |
||
|
|
73f0c8b966 |
||
|
|
71a59645c9 | ||
|
|
3fd7fb618a |
||
|
|
86fd903d5f | ||
|
|
2dfa15dc6e | ||
|
|
5156cff9dc | ||
|
|
1cda86effb | ||
|
|
c53a0f3799 | ||
|
|
6556e339cb |
||
|
|
b906f726fa |
||
|
|
55a3056a04 |
||
|
|
9c9813d9dc | ||
|
|
f1eedf2b7e |
||
|
|
3d6c7c1391 |
||
|
|
72e11113ed |
||
|
|
8af50b9418 | ||
|
|
6b36e3c223 |
||
|
|
c743a10da0 | ||
|
|
861c11b786 |
||
|
|
677f40a38f | ||
|
|
7300631a5c | ||
|
|
9d863fb7e6 | ||
|
|
0208e93f85 | ||
|
|
9691b958ec |
||
|
|
737ce98e4a |
||
|
|
37b2926d2f |
||
|
|
425869346f |
||
|
|
dca1e7ed6f |
||
|
|
1ae217d74d |
||
|
|
862e717ff7 |
||
|
|
3827fd00b3 | ||
|
|
db96050800 | ||
|
|
3269185eb7 | ||
|
|
dcb47d2d94 |
||
|
|
44faf3a200 | ||
|
|
53cc385d4e |
||
|
|
5fb7a71083 |
||
|
|
c7d60d635a |
||
|
|
bd858d6745 |
||
|
|
4750df40c7 |
||
|
|
88320daffa |
||
|
|
17aaa455bb | ||
|
|
f8933ec3e6 | ||
|
|
17a2be2320 |
||
|
|
a37158bc15 |
||
|
|
9e5d5b8e4b |
||
|
|
d9c45477cd |
||
|
|
1432d05156 |
||
|
|
c6daef707a | ||
|
|
1b8f376b90 | ||
|
|
ebac6314cf | ||
|
|
8758a11b37 | ||
|
|
734d5c3ebb | ||
|
|
70feb6f2b0 | ||
|
|
e0f1c42159 | ||
|
|
9a437181d9 |
||
|
|
cdbcdc551a | ||
|
|
20527e4175 | ||
|
|
7b8592538f | ||
|
|
eed70bbbda | ||
|
|
0ba86f8d4f | ||
|
|
29a20bfd0a | ||
|
|
82cda366d6 | ||
|
|
6ad8af7130 | ||
|
|
8126179a0a | ||
|
|
e1c1dcfac8 | ||
|
|
6854902775 | ||
|
|
77deef08ce | ||
|
|
cd5b728fb6 | ||
|
|
ba098427d6 | ||
|
|
45ea1e21f9 | ||
|
|
b8074f9b9c | ||
|
|
8291c0b290 | ||
|
|
00b8c539f8 | ||
|
|
3f5e5cfb81 | ||
|
|
299aae2f4b | ||
|
|
cb5f70cf20 | ||
|
|
90d1b664ee | ||
|
|
79c4e51038 | ||
|
|
a235ed8016 | ||
|
|
919b2e0138 | ||
|
|
2b60822057 | ||
|
|
a008d9fee6 | ||
|
|
c5999b5a21 | ||
|
|
f561f70002 | ||
|
|
19e588bdcb | ||
|
|
115789036a | ||
|
|
2093f2dfac | ||
|
|
9b25a3a41b | ||
|
|
792c47442d |
||
|
|
cb073d877a | ||
|
|
18ef6aa69b | ||
|
|
ea6fe271cd | ||
|
|
8efd9a6bb8 |
||
|
|
d3e1715088 |
||
|
|
40435bd7b2 |
||
|
|
339e056ea0 | ||
|
|
2afc618ccd | ||
|
|
3d003abacb | ||
|
|
f909dfab90 |
||
|
|
7a9546e98c |
||
|
|
0040740b0d |
||
|
|
215730f1b0 |
||
|
|
bd48cee3f4 |
||
|
|
968acc2ec9 |
||
|
|
e6933ca98b |
||
|
|
44afe4c5d5 |
||
|
|
48bf94a728 | ||
|
|
7acadf4ac9 | ||
|
|
f759d9eaa1 | ||
|
|
904d0ea71f | ||
|
|
6cd26cf3df | ||
|
|
27793ac93a | ||
|
|
03d3da0d55 | ||
|
|
8530747606 | ||
|
|
1b5f64e7e4 |
||
|
|
320e3d8b25 | ||
|
|
328a990163 | ||
|
|
0bf6c6911d | ||
|
|
2ce87b168c | ||
|
|
08b6a501ce | ||
|
|
df844b5298 | ||
|
|
0f3e27ef87 | ||
|
|
1df8623bcc | ||
|
|
346c29a086 | ||
|
|
16ed05957c | ||
|
|
decb360cb7 |
||
|
|
8559fbd5a4 | ||
|
|
07867a5dd5 | ||
|
|
7b2ff6b064 | ||
|
|
9084cd3a96 | ||
|
|
0aeb8a794d | ||
|
|
05f506b3b1 |
||
|
|
a425e0e090 | ||
|
|
a5456376be | ||
|
|
743529180e | ||
|
|
eee9866ebb | ||
|
|
d868b1c8ac | ||
|
|
daec74fbc1 | ||
|
|
1c64b36c78 | ||
|
|
8845118d61 | ||
|
|
5de886ca63 | ||
|
|
bdb8b451d1 | ||
|
|
b7e1cf3a79 |
||
|
|
1c654a4e7d |
||
|
|
7a21d7c460 |
||
|
|
8dbea85ccf |
||
|
|
d1d6a123c6 |
||
|
|
300012c689 |
||
|
|
9b91729fe4 |
||
|
|
8b80372f4e |
||
|
|
1abe62ef6d |
||
|
|
57039bedf1 | ||
|
|
5f3e03de1d |
||
|
|
d9929014d5 |
||
|
|
2c6684dda9 |
||
|
|
90369c8ad9 |
||
|
|
a10de645e8 |
||
|
|
c017f44ee2 |
||
|
|
cf59c0dcf7 |
||
|
|
dde7e6e6d6 |
||
|
|
816bec4e12 |
||
|
|
3154518344 |
||
|
|
80a16e5e95 |
||
|
|
350ffeec01 |
||
|
|
78e0088ebd |
||
|
|
76dcff0617 |
||
|
|
8e0c890337 |
||
|
|
2f93d3c717 |
||
|
|
9758f34d36 |
||
|
|
db46aaac85 |
||
|
|
fe6717439c |
||
|
|
068e28509c |
||
|
|
8e804d3066 |
||
|
|
ac19dd7571 |
||
|
|
fa3cbb58cf |
||
|
|
78496bf305 |
||
|
|
816fbbe755 |
||
|
|
949314f55f |
||
|
|
8916262b8b |
||
|
|
7b3c569463 |
||
|
|
92e967672c |
||
|
|
05052560f7 |
||
|
|
8c9a83a139 |
||
|
|
a789dcb7f7 |
||
|
|
5c06dbbf71 |
||
|
|
1e1fda50aa |
||
|
|
82f5ab1a10 |
||
|
|
902eed6fbf |
||
|
|
3ed4445b42 |
||
|
|
d08027250b |
||
|
|
f221ed0b3f |
||
|
|
1ab85fa0d7 |
||
|
|
e3372c7af2 |
||
|
|
d00e2a0675 |
||
|
|
e194ed4d26 |
||
|
|
8b7acb6e12 |
||
|
|
cecaad4b03 |
||
|
|
67033f559b |
||
|
|
4914ac8d45 |
||
|
|
fcb451ad62 | ||
|
|
99813ce5c9 |
||
|
|
7fe5a635a1 |
||
|
|
a247ff6e13 |
||
|
|
92dbd9fd84 | ||
|
|
6bedb90a5d | ||
|
|
85d8caae97 |
||
|
|
c60cfc76a7 |
||
|
|
ad7126c6e9 |
||
|
|
8da640d9e1 | ||
|
|
107c9ac574 | ||
|
|
ff661562da | ||
|
|
787def6fa3 | ||
|
|
29c9f8c58e |
130 changed files with 15360 additions and 6706 deletions
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: 'github-actions'
|
||||
directory: '/'
|
||||
schedule:
|
||||
interval: 'weekly'
|
||||
6
.github/pull_request_template.md
vendored
6
.github/pull_request_template.md
vendored
|
|
@ -2,6 +2,12 @@
|
|||
|
||||
## Description
|
||||
|
||||
## Publishing Your Server
|
||||
|
||||
**Note: We are no longer accepting PRs to add servers to the README.** Instead, please publish your server to the [MCP Server Registry](https://github.com/modelcontextprotocol/registry) to make it discoverable to the MCP ecosystem.
|
||||
|
||||
To publish your server, follow the [quickstart guide](https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/quickstart.mdx). You can browse published servers at [https://registry.modelcontextprotocol.io/](https://registry.modelcontextprotocol.io/).
|
||||
|
||||
## Server Details
|
||||
<!-- If modifying an existing server, provide details -->
|
||||
- Server: <!-- e.g., filesystem, github -->
|
||||
|
|
|
|||
7
.github/workflows/claude.yml
vendored
7
.github/workflows/claude.yml
vendored
|
|
@ -26,7 +26,7 @@ jobs:
|
|||
actions: read
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
|
|
@ -44,5 +44,6 @@ jobs:
|
|||
assignee_trigger: "claude"
|
||||
|
||||
claude_args: |
|
||||
--allowedTools Bash
|
||||
--system-prompt "If posting a comment to GitHub, give a concise summary of the comment at the top and put all the details in a <details> block."
|
||||
--mcp-config .mcp.json
|
||||
--allowedTools "Bash,mcp__mcp-docs,WebFetch"
|
||||
--append-system-prompt "If posting a comment to GitHub, give a concise summary of the comment at the top and put all the details in a <details> block. When working on MCP-related code or reviewing MCP-related changes, use the mcp-docs MCP server to look up the latest protocol documentation. For schema details, reference https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/schema which contains versioned schemas in JSON (schema.json) and TypeScript (schema.ts) formats."
|
||||
|
|
|
|||
52
.github/workflows/python.yml
vendored
52
.github/workflows/python.yml
vendored
|
|
@ -2,11 +2,13 @@ name: Python
|
|||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
# Superseded runs on the same ref are cancelled (e.g. rapid amend-pushes),
|
||||
# except on main, where every merge keeps its own CI run
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
jobs:
|
||||
detect-packages:
|
||||
|
|
@ -14,7 +16,7 @@ jobs:
|
|||
outputs:
|
||||
packages: ${{ steps.find-packages.outputs.packages }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Find Python packages
|
||||
id: find-packages
|
||||
|
|
@ -31,13 +33,13 @@ jobs:
|
|||
name: Test ${{ matrix.package }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v3
|
||||
uses: astral-sh/setup-uv@v7
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version-file: "src/${{ matrix.package }}/.python-version"
|
||||
|
||||
|
|
@ -68,19 +70,19 @@ jobs:
|
|||
name: Build ${{ matrix.package }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v3
|
||||
uses: astral-sh/setup-uv@v7
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version-file: "src/${{ matrix.package }}/.python-version"
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: uv sync --frozen --all-extras --dev
|
||||
run: uv sync --locked --all-extras --dev
|
||||
|
||||
- name: Run pyright
|
||||
working-directory: src/${{ matrix.package }}
|
||||
|
|
@ -91,31 +93,7 @@ jobs:
|
|||
run: uv build
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: dist-${{ matrix.package }}
|
||||
path: src/${{ matrix.package }}/dist/
|
||||
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build, detect-packages]
|
||||
if: github.event_name == 'release'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
package: ${{ fromJson(needs.detect-packages.outputs.packages) }}
|
||||
name: Publish ${{ matrix.package }}
|
||||
|
||||
environment: release
|
||||
permissions:
|
||||
id-token: write # Required for trusted publishing
|
||||
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: dist-${{ matrix.package }}
|
||||
path: dist/
|
||||
|
||||
- name: Publish package to PyPI
|
||||
uses: pypa/gh-action-pypi-publish@release/v1
|
||||
|
|
|
|||
114
.github/workflows/readme-pr-check.yml
vendored
Normal file
114
.github/workflows/readme-pr-check.yml
vendored
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
name: README PR Check
|
||||
|
||||
on:
|
||||
# pull_request_target, not pull_request: fork PRs get a read-only token under
|
||||
# pull_request, so the label and comment calls fail with 403. This job only
|
||||
# calls the API and never checks out PR code, so the write token is safe.
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
paths:
|
||||
- 'README.md'
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
check-readme-only:
|
||||
if: github.event_name == 'pull_request_target'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Check files and comment if README-only
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
script: |
|
||||
const { owner, repo } = context.repo;
|
||||
const prNumber = context.payload.pull_request.number;
|
||||
|
||||
const { data: files } = await github.rest.pulls.listFiles({ owner, repo, pull_number: prNumber });
|
||||
|
||||
if (files.length !== 1 || files[0].filename !== 'README.md') {
|
||||
console.log('PR modifies files other than README, skipping');
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if we've already commented
|
||||
const { data: comments } = await github.rest.issues.listComments({ owner, repo, issue_number: prNumber });
|
||||
if (comments.some(c => c.user.login === 'github-actions[bot]' && c.body.includes('no longer accepting PRs to add new servers'))) {
|
||||
console.log('Already commented on this PR, skipping');
|
||||
return;
|
||||
}
|
||||
|
||||
await github.rest.issues.addLabels({ owner, repo, issue_number: prNumber, labels: ['readme: pending'] });
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: prNumber,
|
||||
body: [
|
||||
'Thanks for your contribution!',
|
||||
'',
|
||||
'**We are no longer accepting PRs to add new servers to the README.** The third-party server list has been removed from this README in favor of the [MCP Server Registry](https://registry.modelcontextprotocol.io/).',
|
||||
'',
|
||||
'👉 **To add a new MCP server:** Please publish it to the [MCP Server Registry](https://github.com/modelcontextprotocol/registry) instead. You can browse published servers at [registry.modelcontextprotocol.io](https://registry.modelcontextprotocol.io/).',
|
||||
'',
|
||||
'👉 **If this PR updates or removes an existing entry:** We do still accept these changes. Please reply with `/i-promise-this-is-not-a-new-server` to continue.',
|
||||
'',
|
||||
'If this PR is adding a new server, please close it and submit to the registry instead.',
|
||||
].join('\n'),
|
||||
});
|
||||
|
||||
handle-confirmation:
|
||||
if: github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '/i-promise-this-is-not-a-new-server')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Swap labels and minimize comments
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
script: |
|
||||
const { owner, repo } = context.repo;
|
||||
const prNumber = context.payload.issue.number;
|
||||
|
||||
// Check if pending label exists
|
||||
const { data: labels } = await github.rest.issues.listLabelsOnIssue({ owner, repo, issue_number: prNumber });
|
||||
if (!labels.some(l => l.name === 'readme: pending')) {
|
||||
console.log('No pending label found, skipping');
|
||||
return;
|
||||
}
|
||||
|
||||
// Swap labels
|
||||
try {
|
||||
await github.rest.issues.removeLabel({ owner, repo, issue_number: prNumber, name: 'readme: pending' });
|
||||
} catch (e) {}
|
||||
await github.rest.issues.addLabels({ owner, repo, issue_number: prNumber, labels: ['readme: ready for review'] });
|
||||
|
||||
// Find the bot's original comment
|
||||
const { data: comments } = await github.rest.issues.listComments({ owner, repo, issue_number: prNumber });
|
||||
const botComment = comments.find(c =>
|
||||
c.user.login === 'github-actions[bot]' &&
|
||||
c.body.includes('no longer accepting PRs to add new servers')
|
||||
);
|
||||
|
||||
// Minimize both comments via GraphQL
|
||||
const minimizeComment = async (nodeId) => {
|
||||
await github.graphql(`
|
||||
mutation($id: ID!) {
|
||||
minimizeComment(input: {subjectId: $id, classifier: RESOLVED}) {
|
||||
minimizedComment { isMinimized }
|
||||
}
|
||||
}
|
||||
`, { id: nodeId });
|
||||
};
|
||||
|
||||
if (botComment) {
|
||||
await minimizeComment(botComment.node_id);
|
||||
}
|
||||
|
||||
// Only minimize user's comment if it's just the command
|
||||
const userComment = context.payload.comment.body.trim();
|
||||
if (userComment === '/i-promise-this-is-not-a-new-server') {
|
||||
await minimizeComment(context.payload.comment.node_id);
|
||||
}
|
||||
55
.github/workflows/release.yml
vendored
55
.github/workflows/release.yml
vendored
|
|
@ -1,9 +1,7 @@
|
|||
name: Automatic Release Creation
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 10 * * *'
|
||||
|
||||
jobs:
|
||||
create-metadata:
|
||||
|
|
@ -15,7 +13,7 @@ jobs:
|
|||
npm_packages: ${{ steps.create-npm-packages.outputs.npm_packages}}
|
||||
pypi_packages: ${{ steps.create-pypi-packages.outputs.pypi_packages}}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
|
@ -27,7 +25,7 @@ jobs:
|
|||
echo "Using last release hash: ${HASH}"
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
uses: astral-sh/setup-uv@v7
|
||||
|
||||
- name: Create version name
|
||||
id: create-version
|
||||
|
|
@ -43,7 +41,7 @@ jobs:
|
|||
cat RELEASE_NOTES.md
|
||||
|
||||
- name: Release notes
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: release-notes
|
||||
path: RELEASE_NOTES.md
|
||||
|
|
@ -69,15 +67,17 @@ jobs:
|
|||
if: ${{ needs.create-metadata.outputs.npm_packages != '[]' || needs.create-metadata.outputs.pypi_packages != '[]' }}
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
permissions:
|
||||
contents: write
|
||||
outputs:
|
||||
changes_made: ${{ steps.commit.outputs.changes_made }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
uses: astral-sh/setup-uv@v7
|
||||
|
||||
- name: Update packages
|
||||
run: |
|
||||
|
|
@ -116,15 +116,15 @@ jobs:
|
|||
id-token: write # Required for trusted publishing
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ needs.create-metadata.outputs.version }}
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
uses: astral-sh/setup-uv@v7
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version-file: "src/${{ matrix.package }}/.python-version"
|
||||
|
||||
|
|
@ -136,6 +136,15 @@ jobs:
|
|||
working-directory: src/${{ matrix.package }}
|
||||
run: uv run --frozen pyright
|
||||
|
||||
- name: Run tests
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: |
|
||||
if [ -d "tests" ] || [ -d "test" ]; then
|
||||
uv run --frozen pytest
|
||||
else
|
||||
echo "No tests directory, skipping"
|
||||
fi
|
||||
|
||||
- name: Build package
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: uv build
|
||||
|
|
@ -144,6 +153,7 @@ jobs:
|
|||
uses: pypa/gh-action-pypi-publish@release/v1
|
||||
with:
|
||||
packages-dir: src/${{ matrix.package }}/dist
|
||||
skip-existing: true # re-runs tolerate already-uploaded files
|
||||
|
||||
publish-npm:
|
||||
needs: [update-packages, create-metadata]
|
||||
|
|
@ -154,18 +164,25 @@ jobs:
|
|||
package: ${{ fromJson(needs.create-metadata.outputs.npm_packages) }}
|
||||
name: Build ${{ matrix.package }}
|
||||
environment: release
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write # Required for npm trusted publishing (OIDC)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ needs.create-metadata.outputs.version }}
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v7
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
|
||||
# OIDC trusted publishing requires npm >=11.5.1; Node 22's bundled npm is 10.x.
|
||||
- name: Ensure npm CLI supports OIDC trusted publishing
|
||||
run: npm install -g npm@^11.5.1
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: npm ci
|
||||
|
|
@ -180,16 +197,22 @@ jobs:
|
|||
fi
|
||||
echo "Version $VERSION is new, proceeding with publish"
|
||||
|
||||
- name: Run tests
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: npm test --if-present
|
||||
|
||||
- name: Build package
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: npm run build
|
||||
|
||||
# Authenticates via OIDC trusted publishing (no token) — each package's
|
||||
# npm trusted publisher is bound to this workflow + the release environment
|
||||
- name: Publish package
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: |
|
||||
npm publish --access public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
NPM_CONFIG_PROVENANCE: "true"
|
||||
|
||||
create-release:
|
||||
needs: [update-packages, create-metadata, publish-pypi, publish-npm]
|
||||
|
|
@ -202,10 +225,10 @@ jobs:
|
|||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Download release notes
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: release-notes
|
||||
|
||||
|
|
|
|||
52
.github/workflows/typescript.yml
vendored
52
.github/workflows/typescript.yml
vendored
|
|
@ -2,11 +2,13 @@ name: TypeScript
|
|||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
# Superseded runs on the same ref are cancelled (e.g. rapid amend-pushes),
|
||||
# except on main, where every merge keeps its own CI run
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
jobs:
|
||||
detect-packages:
|
||||
|
|
@ -14,7 +16,7 @@ jobs:
|
|||
outputs:
|
||||
packages: ${{ steps.find-packages.outputs.packages }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
- name: Find JS packages
|
||||
id: find-packages
|
||||
working-directory: src
|
||||
|
|
@ -30,9 +32,9 @@ jobs:
|
|||
name: Test ${{ matrix.package }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v7
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
|
|
@ -53,9 +55,9 @@ jobs:
|
|||
name: Build ${{ matrix.package }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v7
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
|
|
@ -68,35 +70,3 @@ jobs:
|
|||
working-directory: src/${{ matrix.package }}
|
||||
run: npm run build
|
||||
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build, detect-packages]
|
||||
if: github.event_name == 'release'
|
||||
environment: release
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
package: ${{ fromJson(needs.detect-packages.outputs.packages) }}
|
||||
name: Publish ${{ matrix.package }}
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: npm ci
|
||||
|
||||
- name: Publish package
|
||||
working-directory: src/${{ matrix.package }}
|
||||
run: npm publish --access public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
|
|
|||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -122,8 +122,9 @@ dist
|
|||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# Jetbrains IDEs
|
||||
# IDEs
|
||||
.idea/
|
||||
.vscode/
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
|
|
|
|||
8
.mcp.json
Normal file
8
.mcp.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"mcpServers": {
|
||||
"mcp-docs": {
|
||||
"type": "http",
|
||||
"url": "https://modelcontextprotocol.io/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
|
|
@ -1 +0,0 @@
|
|||
{}
|
||||
94
ADDITIONAL.md
Normal file
94
ADDITIONAL.md
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# Additional links
|
||||
|
||||
This is a curated collection of community-built frameworks and resources that simplify building MCP servers and clients, along with other useful tools, libraries, and references for working with MCP.
|
||||
|
||||
## 📚 Frameworks
|
||||
|
||||
### For servers
|
||||
|
||||
* **[Anubis MCP](https://github.com/zoedsoupe/anubis-mcp)** (Elixir) - A high-performance and high-level Model Context Protocol (MCP) implementation in Elixir. Think like "Live View" for MCP.
|
||||
* **[ModelFetch](https://github.com/phuctm97/modelfetch/)** (TypeScript) - Runtime-agnostic SDK to create and deploy MCP servers anywhere TypeScript/JavaScript runs
|
||||
* **[EasyMCP](https://github.com/zcaceres/easy-mcp/)** (TypeScript)
|
||||
* **[FastAPI to MCP auto generator](https://github.com/tadata-org/fastapi_mcp)** – A zero-configuration tool for automatically exposing FastAPI endpoints as MCP tools by **[Tadata](https://tadata.com/)**
|
||||
* **[FastMCP](https://github.com/punkpeye/fastmcp)** (TypeScript)
|
||||
* **[Foobara MCP Connector](https://github.com/foobara/mcp-connector)** - Easily expose Foobara commands written in Ruby as tools via MCP
|
||||
* **[Foxy Contexts](https://github.com/strowk/foxy-contexts)** – A library to build MCP servers in Golang by **[strowk](https://github.com/strowk)**
|
||||
* **[Higress MCP Server Hosting](https://github.com/alibaba/higress/tree/main/plugins/wasm-go/mcp-servers)** - A solution for hosting MCP Servers by extending the API Gateway (based on Envoy) with wasm plugins.
|
||||
* **[MCP Declarative Java SDK](https://github.com/codeboyzhou/mcp-declarative-java-sdk)** Annotation-driven MCP servers development with Java, no Spring Framework Required, minimize dependencies as much as possible.
|
||||
* **[MCP-Framework](https://mcp-framework.com)** Build MCP servers with elegance and speed in TypeScript. Comes with a CLI to create your project with `mcp create app`. Get started with your first server in under 5 minutes by **[Alex Andru](https://github.com/QuantGeekDev)**
|
||||
* **[MCP Plexus](https://github.com/Super-I-Tech/mcp_plexus)**: A secure, **multi-tenant** and Multi-user MCP python server framework built to integrate easily with external services via OAuth 2.1, offering scalable and robust solutions for managing complex AI applications.
|
||||
* **[mcp_sse (Elixir)](https://github.com/kEND/mcp_sse)** An SSE implementation in Elixir for rapidly creating MCP servers.
|
||||
* **[mxcp](https://github.com/raw-labs/mxcp)** (Python) - Open-source framework for building enterprise-grade MCP servers using just YAML, SQL, and Python, with built-in auth, monitoring, ETL and policy enforcement.
|
||||
* **[Next.js MCP Server Template](https://github.com/vercel-labs/mcp-for-next.js)** (Typescript) - A starter Next.js project that uses the MCP Adapter to allow MCP clients to connect and access resources.
|
||||
* **[PayMCP](https://github.com/blustAI/paymcp)** (Python & TypeScript) - Lightweight payments layer for MCP servers: turn tools into paid endpoints with a two-line decorator. [PyPI](https://pypi.org/project/paymcp/) · [npm](https://www.npmjs.com/package/paymcp) · [TS repo](https://github.com/blustAI/paymcp-ts)
|
||||
* **[Perl SDK](https://github.com/mojolicious/mojo-mcp)** - An SDK for building MCP servers and clients with the Perl programming language.
|
||||
* **[Quarkus MCP Server SDK](https://github.com/quarkiverse/quarkus-mcp-server)** (Java)
|
||||
- **[R mcptools](https://github.com/posit-dev/mcptools)** - An R SDK for creating R-based MCP servers and retrieving functionality from third-party MCP servers as R functions.
|
||||
* **[SAP ABAP MCP Server SDK](https://github.com/abap-ai/mcp)** - Build SAP ABAP based MCP servers. ABAP 7.52 based with 7.02 downport; runs on R/3 & S/4HANA on-premises, currently not cloud-ready.
|
||||
* **[Spring AI MCP Server](https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html)** - Provides auto-configuration for setting up an MCP server in Spring Boot applications.
|
||||
* **[Template MCP Server](https://github.com/mcpdotdirect/template-mcp-server)** - A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
|
||||
* **[AgentR Universal MCP SDK](https://github.com/universal-mcp/universal-mcp)** - A python SDK to build MCP Servers with inbuilt credential management by **[Agentr](https://agentr.dev/home)**
|
||||
* **[Vercel MCP Adapter](https://github.com/vercel/mcp-adapter)** (TypeScript) - A simple package to start serving an MCP server on most major JS meta-frameworks including Next, Nuxt, Svelte, and more.
|
||||
* **[PHP MCP Server](https://github.com/php-mcp/server)** (PHP) - Core PHP implementation for the Model Context Protocol (MCP) server
|
||||
|
||||
### For clients
|
||||
|
||||
* **[codemirror-mcp](https://github.com/marimo-team/codemirror-mcp)** - CodeMirror extension that implements the Model Context Protocol (MCP) for resource mentions and prompt commands
|
||||
* **[llm-analysis-assistant](https://github.com/xuzexin-hz/llm-analysis-assistant)** <img height="12" width="12" src="https://raw.githubusercontent.com/xuzexin-hz/llm-analysis-assistant/refs/heads/main/src/llm_analysis_assistant/pages/html/imgs/favicon.ico" alt="Langfuse Logo" /> - A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also supports monitoring and simulation of ollama/openai interface.
|
||||
* **[MCP-Agent](https://github.com/lastmile-ai/mcp-agent)** - A simple, composable framework to build agents using Model Context Protocol by **[LastMile AI](https://www.lastmileai.dev)**
|
||||
* **[Spring AI MCP Client](https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html)** - Provides auto-configuration for MCP client functionality in Spring Boot applications.
|
||||
* **[MCP CLI Client](https://github.com/vincent-pli/mcp-cli-host)** - A CLI host application that enables Large Language Models (LLMs) to interact with external tools through the Model Context Protocol (MCP).
|
||||
* **[OpenMCP Client](https://github.com/LSTM-Kirigaya/openmcp-client/)** - An all-in-one vscode/trae/cursor plugin for MCP server debugging. [Document](https://kirigaya.cn/openmcp/) & [OpenMCP SDK](https://kirigaya.cn/openmcp/sdk-tutorial/).
|
||||
* **[PHP MCP Client](https://github.com/php-mcp/client)** - Core PHP implementation for the Model Context Protocol (MCP) Client
|
||||
* **[Runbear](https://runbear.io/solutions/integrations/slack/mcp)** - No-code MCP client for team chat platforms, such as Slack, Microsoft Teams, and Discord.
|
||||
|
||||
## 📚 Resources
|
||||
|
||||
- **[A2A-MCP Java Bridge](https://github.com/vishalmysore/a2ajava)** - A2AJava brings powerful A2A-MCP integration directly into your Java applications. It enables developers to annotate standard Java methods and instantly expose them as MCP Server, A2A-discoverable actions — with no boilerplate or service registration overhead.
|
||||
- **[AiMCP](https://www.aimcp.info)** - A collection of MCP clients&servers to find the right mcp tools by **[Hekmon](https://github.com/hekmon8)**
|
||||
- **[Awesome Crypto MCP Servers by badkk](https://github.com/badkk/awesome-crypto-mcp-servers)** - A curated list of MCP servers by **[Luke Fan](https://github.com/badkk)**
|
||||
- **[Awesome MCP Servers by appcypher](https://github.com/appcypher/awesome-mcp-servers)** - A curated list of MCP servers by **[Stephen Akinyemi](https://github.com/appcypher)**
|
||||
- **[Awesome MCP Servers by punkpeye](https://github.com/punkpeye/awesome-mcp-servers)** (**[website](https://glama.ai/mcp/servers)**) - A curated list of MCP servers by **[Frank Fiegel](https://github.com/punkpeye)**
|
||||
- **[Awesome MCP Servers by wong2](https://github.com/wong2/awesome-mcp-servers)** (**[website](https://mcpservers.org)**) - A curated list of MCP servers by **[wong2](https://github.com/wong2)**
|
||||
- **[Awesome Remote MCP Servers by JAW9C](https://github.com/jaw9c/awesome-remote-mcp-servers)** - A curated list of **remote** MCP servers, including their authentication support by **[JAW9C](https://github.com/jaw9c)**
|
||||
- **[Discord Server](https://glama.ai/mcp/discord)** – A community discord server dedicated to MCP by **[Frank Fiegel](https://github.com/punkpeye)**
|
||||
- **[Install This MCP](https://installthismcp.com)** - Reduce Installation Friction with beautiful installation guides
|
||||
- **[Klavis AI](https://www.klavis.ai)** - Open Source MCP Infra. Hosted MCP servers and MCP clients on Slack and Discord.
|
||||
- **[MCP Badges](https://github.com/mcpx-dev/mcp-badges)** – Quickly highlight your MCP project with clear, eye-catching badges, by **[Ironben](https://github.com/nanbingxyz)**
|
||||
- **[MCPProxy](https://github.com/smart-mcp-proxy/mcpproxy-go)** - Open-source local app that enables access to multiple MCP servers and thousands of tools with intelligent discovery via MCP protocol, runs servers in isolated environments, and features automatic quarantine protection against malicious tools.
|
||||
- **[MCPRepository.com](https://mcprepository.com/)** - A repository that indexes and organizes all MCP servers for easy discovery.
|
||||
- **[mcp-cli](https://github.com/wong2/mcp-cli)** - A CLI inspector for the Model Context Protocol by **[wong2](https://github.com/wong2)**
|
||||
- **[mcp-dockmaster](https://mcp-dockmaster.com)** - An Open-Sourced UI to install and manage MCP servers for Windows, Linux and macOS.
|
||||
- **[mcp-get](https://mcp-get.com)** - Command line tool for installing and managing MCP servers by **[Michael Latman](https://github.com/michaellatman)**
|
||||
- **[mcp-guardian](https://github.com/eqtylab/mcp-guardian)** - GUI application + tools for proxying / managing control of MCP servers by **[EQTY Lab](https://eqtylab.io)**
|
||||
- **[MCP Linker](https://github.com/milisp/mcp-linker)** - A cross-platform Tauri GUI tool for one-click setup and management of MCP servers, supporting Claude Desktop, Cursor, Windsurf, VS Code, Cline, and Neovim.
|
||||
- **[mcp-manager](https://github.com/zueai/mcp-manager)** - Simple Web UI to install and manage MCP servers for Claude Desktop by **[Zue](https://github.com/zueai)**
|
||||
- **[MCP Marketplace Web Plugin](https://github.com/AI-Agent-Hub/mcp-marketplace)** MCP Marketplace is a small Web UX plugin to integrate with AI applications, Support various MCP Server API Endpoint (e.g pulsemcp.com/deepnlp.org and more). Allowing user to browse, paginate and select various MCP servers by different categories. [Pypi](https://pypi.org/project/mcp-marketplace) | [Maintainer](https://github.com/AI-Agent-Hub) | [Website](http://www.deepnlp.org/store/ai-agent/mcp-server)
|
||||
- **[mcp.natoma.ai](https://mcp.natoma.ai)** – A Hosted MCP Platform to discover, install, manage and deploy MCP servers by **[Natoma Labs](https://www.natoma.ai)**
|
||||
- **[mcp.run](https://mcp.run)** - A hosted registry and control plane to install & run secure + portable MCP Servers.
|
||||
- **[MCPHub](https://www.mcphub.com)** - Website to list high quality MCP servers and reviews by real users. Also provide online chatbot for popular LLM models with MCP server support.
|
||||
- **[MCP Router](https://mcp-router.net)** – Free Windows and macOS app that simplifies MCP management while providing seamless app authentication and powerful log visualization by **[MCP Router](https://github.com/mcp-router/mcp-router)**
|
||||
- **[MCP Servers Hub](https://github.com/apappascs/mcp-servers-hub)** (**[website](https://mcp-servers-hub-website.pages.dev/)**) - A curated list of MCP servers by **[apappascs](https://github.com/apappascs)**
|
||||
- **[MCPServers.com](https://mcpservers.com)** - A growing directory of high-quality MCP servers with clear setup guides for a variety of MCP clients. Built by the team behind the **[Highlight MCP client](https://highlightai.com/)**
|
||||
- **[MCP Servers Rating and User Reviews](http://www.deepnlp.org/store/ai-agent/mcp-server)** - Website to rate MCP servers, write authentic user reviews, and [search engine for agent & mcp](http://www.deepnlp.org/search/agent)
|
||||
- **[MCP Sky](https://bsky.app/profile/brianell.in/feed/mcp)** - Bluesky feed for MCP related news and discussion by **[@brianell.in](https://bsky.app/profile/brianell.in)**
|
||||
- **[MCP X Community](https://x.com/i/communities/1861891349609603310)** – A X community for MCP by **[Xiaoyi](https://x.com/chxy)**
|
||||
- **[MCPHub](https://github.com/Jeamee/MCPHub-Desktop)** – An Open Source macOS & Windows GUI Desktop app for discovering, installing and managing MCP servers by **[Jeamee](https://github.com/jeamee)**
|
||||
- **[mcpm](https://github.com/pathintegral-institute/mcpm.sh)** ([website](https://mcpm.sh)) - MCP Manager (MCPM) is a Homebrew-like service for managing Model Context Protocol (MCP) servers across clients by **[Pathintegral](https://github.com/pathintegral-institute)**
|
||||
- **[MCPVerse](https://mcpverse.dev)** - A portal for creating & hosting authenticated MCP servers and connecting to them securely.
|
||||
- **[MCP Servers Search](https://github.com/atonomus/mcp-servers-search)** - An MCP server that provides tools for querying and discovering available MCP servers from this list.
|
||||
- **[Search MCP Server](https://github.com/krzysztofkucmierz/search-mcp-server)** - Recommends the most relevant MCP servers based on the client's query by searching this README file.
|
||||
- **[MCPWatch](https://github.com/kapilduraphe/mcp-watch)** - A comprehensive security scanner for Model Context Protocol (MCP) servers that detects vulnerabilities and security issues in your MCP server implementations.
|
||||
- **[mkinf](https://mkinf.io)** - An Open Source registry of hosted MCP Servers to accelerate AI agent workflows.
|
||||
- **[Open-Sourced MCP Servers Directory](https://github.com/chatmcp/mcp-directory)** - A curated list of MCP servers by **[mcpso](https://mcp.so)**
|
||||
- **[OpenTools](https://opentools.com)** - An open registry for finding, installing, and building with MCP servers by **[opentoolsteam](https://github.com/opentoolsteam)**
|
||||
- **[Programmatic MCP Prototype](https://github.com/domdomegg/programmatic-mcp-prototype)** - Experimental agent prototype demonstrating programmatic MCP tool composition, progressive tool discovery, state persistence, and skill building through TypeScript code execution by **[Adam Jones](https://github.com/domdomegg)**
|
||||
- **[PulseMCP](https://www.pulsemcp.com)** ([API](https://www.pulsemcp.com/api)) - Community hub & weekly newsletter for discovering MCP servers, clients, articles, and news by **[Tadas Antanavicius](https://github.com/tadasant)**, **[Mike Coughlin](https://github.com/macoughl)**, and **[Ravina Patel](https://github.com/ravinahp)**
|
||||
- **[r/mcp](https://www.reddit.com/r/mcp)** – A Reddit community dedicated to MCP by **[Frank Fiegel](https://github.com/punkpeye)**
|
||||
- **[MCP.ing](https://mcp.ing/)** - A list of MCP services for discovering MCP servers in the community and providing a convenient search function for MCP services by **[iiiusky](https://github.com/iiiusky)**
|
||||
- **[MCP Hunt](https://mcp-hunt.com)** - Realtime platform for discovering trending MCP servers with momentum tracking, upvoting, and community discussions - like Product Hunt meets Reddit for MCP
|
||||
- **[Smithery](https://smithery.ai/)** - A registry of MCP servers to find the right tools for your LLM agents by **[Henry Mao](https://github.com/calclavia)**
|
||||
- **[Toolbase](https://gettoolbase.ai)** - Desktop application that manages tools and MCP servers with just a few clicks - no coding required by **[gching](https://github.com/gching)**
|
||||
- **[ToolHive](https://github.com/StacklokLabs/toolhive)** - A lightweight utility designed to simplify the deployment and management of MCP servers, ensuring ease of use, consistency, and security through containerization by **[StacklokLabs](https://github.com/StacklokLabs)**
|
||||
- **[NetMind](https://www.netmind.ai/AIServices)** - Access powerful AI services via simple APIs or MCP servers to supercharge your productivity.
|
||||
- **[Webrix MCP Gateway](https://github.com/webrix-ai/secure-mcp-gateway)** - Enterprise MCP gateway with SSO, RBAC, audit trails, and token vaults for secure, centralized AI agent access control. Deploy via Helm charts on-premise or in your cloud. [webrix.ai](https://webrix.ai)
|
||||
104
CLAUDE.md
Normal file
104
CLAUDE.md
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Official MCP reference server implementations. This is an npm workspaces monorepo containing 7 servers (4 TypeScript, 3 Python) under `src/`. Each server is a standalone package published to npm or PyPI.
|
||||
|
||||
## Monorepo Structure
|
||||
|
||||
```
|
||||
src/
|
||||
everything/ TS @modelcontextprotocol/server-everything (reference server, all MCP features)
|
||||
filesystem/ TS @modelcontextprotocol/server-filesystem (file operations with Roots access control)
|
||||
memory/ TS @modelcontextprotocol/server-memory (knowledge graph persistence)
|
||||
sequentialthinking/ TS @modelcontextprotocol/server-sequential-thinking (step-by-step reasoning)
|
||||
fetch/ Py mcp-server-fetch (web content fetching)
|
||||
git/ Py mcp-server-git (git repository operations)
|
||||
time/ Py mcp-server-time (timezone queries and conversion)
|
||||
```
|
||||
|
||||
## Build & Test Commands
|
||||
|
||||
### TypeScript servers
|
||||
|
||||
```bash
|
||||
# Single server
|
||||
cd src/<server> && npm ci && npm run build && npm test
|
||||
|
||||
# All TS servers from root
|
||||
npm install && npm run build
|
||||
```
|
||||
|
||||
- Build: `tsc` (target ES2022, module Node16, strict mode)
|
||||
- Tests: **vitest** with `@vitest/coverage-v8` (required for new tests)
|
||||
- Node version: **22**
|
||||
|
||||
### Python servers
|
||||
|
||||
```bash
|
||||
cd src/<server> && uv sync --frozen --all-extras --dev
|
||||
|
||||
# Run tests (if tests/ or test/ directory exists)
|
||||
uv run pytest
|
||||
|
||||
# Type checking
|
||||
uv run pyright
|
||||
|
||||
# Linting
|
||||
uv run ruff check .
|
||||
```
|
||||
|
||||
- Build system: **hatchling** (`uv build`)
|
||||
- Package manager: **uv** (not pip)
|
||||
- Python version: **>= 3.10** (per-server `.python-version` file)
|
||||
- Type checking: **pyright** (enforced in CI)
|
||||
- Linting: **ruff**
|
||||
|
||||
## Code Style
|
||||
|
||||
### TypeScript
|
||||
|
||||
- ES modules with `.js` extension in import paths
|
||||
- Strict TypeScript typing for all functions and variables
|
||||
- Zod schemas for tool input validation
|
||||
- 2-space indentation, trailing commas in multi-line objects
|
||||
- camelCase for variables/functions, PascalCase for types/classes, UPPER_CASE for constants
|
||||
- kebab-case for file names and registered tools/prompts/resources
|
||||
- Verb-first tool names (e.g., `get-file-info`, not `file-info`)
|
||||
- Imports grouped: external first, then internal
|
||||
|
||||
### Python
|
||||
|
||||
- Type hints enforced via pyright
|
||||
- Async/await patterns (especially in fetch server with pytest-asyncio)
|
||||
- Follow existing module layout per server
|
||||
|
||||
## Contributing Guidelines
|
||||
|
||||
**Accepted:** Bug fixes, usability improvements, enhancements demonstrating MCP protocol features (Resources, Prompts, Roots -- not just Tools).
|
||||
|
||||
**Selective:** New features outside a server's core purpose or highly opinionated additions.
|
||||
|
||||
**Not accepted:** New server implementations (use the [MCP Server Registry](https://github.com/modelcontextprotocol/registry)), README server listing changes.
|
||||
|
||||
## CI/CD Pipeline
|
||||
|
||||
Both TypeScript and Python workflows use **dynamic package detection** (find + jq matrix strategy):
|
||||
|
||||
1. `detect-packages` -- finds all `package.json` / `pyproject.toml` under `src/`
|
||||
2. `test` -- runs tests per package
|
||||
3. `build` -- compiles and type-checks per package
|
||||
4. `publish` -- on release events only (npm for TS, PyPI trusted publishing for Python)
|
||||
|
||||
## MCP Protocol Reference
|
||||
|
||||
The repo is configured with an MCP docs server (`.mcp.json`) pointing to `https://modelcontextprotocol.io/mcp`. For schema details, reference `https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/schema` which contains versioned schemas in JSON and TypeScript formats.
|
||||
|
||||
## Key Patterns
|
||||
|
||||
- Each server registers capabilities via `registerTools(server)`, `registerResources(server)`, `registerPrompts(server)` functions
|
||||
- Tool annotations: set `readOnlyHint`, `idempotentHint`, `destructiveHint` per MCP spec
|
||||
- Transport support: stdio (default), SSE (deprecated), Streamable HTTP
|
||||
- All PRs are reviewed against the [PR template](.github/pull_request_template.md) checklist -- ensure MCP docs are read, security best practices followed, and changes tested with an LLM client
|
||||
|
|
@ -6,7 +6,9 @@ We accept changes through [the standard GitHub flow model](https://docs.github.c
|
|||
|
||||
## Server Listings
|
||||
|
||||
We welcome PRs that add links to your servers in the [README.md](./README.md)!
|
||||
The README no longer contains a list of third-party MCP servers — that list has been retired in favor of the [MCP Server Registry](https://github.com/modelcontextprotocol/registry). To make your server discoverable, follow the [quickstart guide](https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/quickstart.mdx) to publish it there.
|
||||
|
||||
You can browse published servers at [https://registry.modelcontextprotocol.io/](https://registry.modelcontextprotocol.io/).
|
||||
|
||||
## Server Implementations
|
||||
|
||||
|
|
@ -16,10 +18,10 @@ We welcome:
|
|||
- **Enhancements that demonstrate MCP protocol features** — We encourage contributions that help reference servers better illustrate underutilized aspects of the MCP protocol beyond just Tools, such as Resources, Prompts, or Roots. For example, adding Roots support to filesystem-server helps showcase this important but lesser-known feature.
|
||||
|
||||
We're more selective about:
|
||||
- **Other new features** — Especially if they're not crucial to the server's core purpose or are highly opinionated. The existing servers are reference servers meant to inspire the community. If you need specific features, we encourage you to build enhanced versions! We think a diverse ecosystem of servers is beneficial for everyone, and would love to link to your improved server in our README.
|
||||
- **Other new features** — Especially if they're not crucial to the server's core purpose or are highly opinionated. The existing servers are reference servers meant to inspire the community. If you need specific features, we encourage you to build enhanced versions and publish them to the [MCP Server Registry](https://github.com/modelcontextprotocol/registry)! We think a diverse ecosystem of servers is beneficial for everyone.
|
||||
|
||||
We don't accept:
|
||||
- **New server implementations** — We encourage you to publish them yourself, and link to them from the README.
|
||||
- **New server implementations** — We encourage you to publish them to the [MCP Server Registry](https://github.com/modelcontextprotocol/registry) instead.
|
||||
|
||||
## Testing
|
||||
|
||||
|
|
|
|||
197
LICENSE
197
LICENSE
|
|
@ -1,6 +1,193 @@
|
|||
The MCP project is undergoing a licensing transition from the MIT License to the Apache License, Version 2.0 ("Apache-2.0"). All new code and specification contributions to the project are licensed under Apache-2.0. Documentation contributions (excluding specifications) are licensed under CC-BY-4.0.
|
||||
|
||||
Contributions for which relicensing consent has been obtained are licensed under Apache-2.0. Contributions made by authors who originally licensed their work under the MIT License and who have not yet granted explicit permission to relicense remain licensed under the MIT License.
|
||||
|
||||
No rights beyond those granted by the applicable original license are conveyed for such contributions.
|
||||
|
||||
---
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to the Licensor for inclusion in the Work by the copyright
|
||||
owner or by an individual or Legal Entity authorized to submit on behalf
|
||||
of the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
---
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Anthropic, PBC
|
||||
Copyright (c) 2024-2025 Model Context Protocol a Series of LF Projects, LLC.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
@ -19,3 +206,11 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
Creative Commons Attribution 4.0 International (CC-BY-4.0)
|
||||
|
||||
Documentation in this project (excluding specifications) is licensed under
|
||||
CC-BY-4.0. See https://creativecommons.org/licenses/by/4.0/legalcode for
|
||||
the full license text.
|
||||
|
|
|
|||
49
RELEASING.md
Normal file
49
RELEASING.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# Releasing
|
||||
|
||||
How the packages in this repository are published, and what to do when a publish fails.
|
||||
|
||||
## How publishing works
|
||||
|
||||
All packages publish exclusively from the [`release.yml`](.github/workflows/release.yml) GitHub Actions workflow, gated by the `release` environment (a required reviewer must approve each deployment). Releases are triggered deliberately by a maintainer via **workflow_dispatch** (Actions → Release → Run workflow, or `gh workflow run release.yml`) — there is no scheduled/automatic release.
|
||||
|
||||
**Authentication is OIDC trusted publishing on both registries — there are no registry tokens.**
|
||||
|
||||
- **npm** (TypeScript servers): each `@modelcontextprotocol/*` package is registered on npmjs.com with a [trusted publisher](https://docs.npmjs.com/trusted-publishers) bound to this repository, workflow filename `release.yml`, and environment `release` (the binding is case-sensitive). Packages publish with [provenance attestations](https://docs.npmjs.com/generating-provenance-statements).
|
||||
- **PyPI** (Python servers): published via [PyPI trusted publishing](https://docs.pypi.org/trusted-publishers/) using `pypa/gh-action-pypi-publish`.
|
||||
|
||||
A release run:
|
||||
|
||||
1. **Detects changed packages** since the last release tag — a package counts as changed if any `.py`, `.ts`, or `.md` file in its directory changed (READMEs ship inside the published artifacts).
|
||||
2. **Stamps versions and pushes the release tag** — versions are date-based (CalVer, e.g. `2026.7.4`).
|
||||
3. **Publishes each changed package as an independent matrix job** (`fail-fast: false` — one package's failure never blocks another). Each job: checkout at the release tag → install → double-publish guard → **run the package's tests** (plus `pyright` for Python) → build → publish. The guard differs by registry: the npm job aborts before tests if the version already exists; for PyPI the skip happens at the publish step itself (`skip-existing` on the upload action).
|
||||
4. **Creates the GitHub release** with generated notes.
|
||||
|
||||
## When a publish fails
|
||||
|
||||
A failed matrix leg means that one package didn't publish; everything that succeeded stays published.
|
||||
|
||||
**Preferred: re-run the failed jobs on the same run.**
|
||||
|
||||
```bash
|
||||
gh run rerun <run-id> --failed --repo modelcontextprotocol/servers
|
||||
```
|
||||
|
||||
- A re-run is still a `release.yml` run in the `release` environment, so it satisfies the trusted-publisher binding.
|
||||
- It re-runs only the failed legs, checked out at the original release tag — it publishes exactly the tagged code, and the double-publish guard keeps already-published packages safe.
|
||||
- It needs a fresh `release` environment approval, and the run must be complete first (approve or reject any pending deployments).
|
||||
- GitHub's re-run window is ~30 days from the original run, and re-runs execute the *original* workflow snapshot — workflow fixes on `main` don't apply to a re-run.
|
||||
|
||||
**Otherwise: let the next release pick it up.** If the re-run window has closed (or the fix required a workflow change), the failed version simply never exists on that registry — that's benign; npm and PyPI version histories don't need to match. The package publishes at the next version, provided it has a qualifying change (`.py`, `.ts`, or `.md`) since the last release tag.
|
||||
|
||||
**Never:**
|
||||
|
||||
- Publish manually with an npm token or from a laptop — there are no registry tokens, and manual publishes would break the provenance/trust chain.
|
||||
- Dispatch a fresh `release.yml` run expecting it to retry a failed version — versions are date-granular, so a same-day dispatch collides with the existing tag, and a later dispatch mints a *new* version. Neither retries the failed one.
|
||||
|
||||
## Environment approvals
|
||||
|
||||
The `release` environment's required-reviewer list is configured in the repository settings (Settings → Environments → `release`). Reviewer rights come only from that list — repository admin does not confer deployment approval.
|
||||
|
||||
---
|
||||
|
||||
Planned changes to this process — semver via changesets for the TypeScript packages, publishing triggered by manually-created GitHub Releases — are tracked in [#4463](https://github.com/modelcontextprotocol/servers/issues/4463). This document will be updated when that work merges.
|
||||
21
SECURITY.md
21
SECURITY.md
|
|
@ -1,10 +1,21 @@
|
|||
# Security Policy
|
||||
Thank you for helping us keep our MCP servers secure.
|
||||
|
||||
The **reference servers** in this repo are maintained by [Anthropic](https://www.anthropic.com/) as part of the Model Context Protocol project.
|
||||
Thank you for helping keep the Model Context Protocol and its ecosystem secure.
|
||||
|
||||
The security of our systems and user data is Anthropic’s top priority. We appreciate the work of security researchers acting in good faith in identifying and reporting potential vulnerabilities.
|
||||
## Important Notice
|
||||
|
||||
## Vulnerability Disclosure Program
|
||||
The servers in this repository are **reference implementations** intended to demonstrate
|
||||
MCP features and SDK usage. They serve as educational examples for developers building
|
||||
their own MCP servers, not as production-ready solutions.
|
||||
|
||||
Our Vulnerability Program guidelines are defined on our [HackerOne program page](https://hackerone.com/anthropic-vdp). We ask that any validated vulnerability in this functionality be reported through the [submission form](https://hackerone.com/anthropic-vdp/reports/new?type=team&report_type=vulnerability).
|
||||
This repository is **not** eligible for security vulnerability reporting. If you discover
|
||||
a vulnerability in an MCP SDK, please report it in the appropriate SDK repository.
|
||||
|
||||
## Reporting Security Issues in MCP SDKs
|
||||
|
||||
If you discover a security vulnerability in an MCP SDK, please report it through the
|
||||
[GitHub Security Advisory process](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability)
|
||||
in the relevant SDK repository.
|
||||
|
||||
Please **do not** report security vulnerabilities through public GitHub issues, discussions,
|
||||
or pull requests.
|
||||
|
|
|
|||
4413
package-lock.json
generated
4413
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -3,8 +3,8 @@
|
|||
"private": true,
|
||||
"version": "0.6.2",
|
||||
"description": "Model Context Protocol servers",
|
||||
"license": "MIT",
|
||||
"author": "Anthropic, PBC (https://anthropic.com)",
|
||||
"license": "SEE LICENSE IN LICENSE",
|
||||
"author": "Model Context Protocol a Series of LF Projects, LLC.",
|
||||
"homepage": "https://modelcontextprotocol.io",
|
||||
"bugs": "https://github.com/modelcontextprotocol/servers/issues",
|
||||
"type": "module",
|
||||
|
|
@ -23,5 +23,9 @@
|
|||
"@modelcontextprotocol/server-memory": "*",
|
||||
"@modelcontextprotocol/server-filesystem": "*",
|
||||
"@modelcontextprotocol/server-sequential-thinking": "*"
|
||||
},
|
||||
"overrides": {
|
||||
"qs": ">=6.15.2",
|
||||
"hono": ">=4.12.21"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,6 +97,9 @@ class PyPiPackage:
|
|||
with open(self.path / "pyproject.toml", "w") as f:
|
||||
f.write(tomlkit.dumps(data))
|
||||
|
||||
# Regenerate uv.lock to match the updated pyproject.toml
|
||||
subprocess.run(["uv", "lock"], cwd=self.path, check=True)
|
||||
|
||||
|
||||
def has_changes(path: Path, git_hash: GitHash) -> bool:
|
||||
"""Check if any files changed between current state and git hash"""
|
||||
|
|
@ -110,7 +113,9 @@ def has_changes(path: Path, git_hash: GitHash) -> bool:
|
|||
)
|
||||
|
||||
changed_files = [Path(f) for f in output.stdout.splitlines()]
|
||||
relevant_files = [f for f in changed_files if f.suffix in [".py", ".ts"]]
|
||||
# .md counts as a change: READMEs ship inside the published package
|
||||
# (npm tarball / PyPI long_description)
|
||||
relevant_files = [f for f in changed_files if f.suffix in [".py", ".ts", ".md"]]
|
||||
return len(relevant_files) >= 1
|
||||
except subprocess.CalledProcessError:
|
||||
return False
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue