Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: modelcontextprotocol/servers
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 0.3.1
Choose a base ref
...
head repository: modelcontextprotocol/servers
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Loading
Showing with 13,471 additions and 2,721 deletions.
  1. +3 −4 .github/pull_request_template.md
  2. +221 −0 .github/workflows/release.yml
  3. +39 −9 .github/workflows/typescript.yml
  4. +30 −0 .github/workflows/version-check.yml
  5. +12 −18 CONTRIBUTING.md
  6. +264 −16 README.md
  7. +2 −6 SECURITY.md
  8. +2,043 −88 package-lock.json
  9. +4 −2 package.json
  10. +210 −0 scripts/release.py
  11. +22 −0 src/aws-kb-retrieval-server/Dockerfile
  12. +79 −0 src/aws-kb-retrieval-server/README.md
  13. +166 −0 src/aws-kb-retrieval-server/index.ts
  14. +30 −0 src/aws-kb-retrieval-server/package.json
  15. +17 −0 src/aws-kb-retrieval-server/tsconfig.json
  16. +23 −0 src/brave-search/Dockerfile
  17. +48 −5 src/brave-search/README.md
  18. +1 −2 src/brave-search/index.ts
  19. +4 −5 src/brave-search/package.json
  20. +24 −0 src/everart/Dockerfile
  21. +97 −0 src/everart/README.md
  22. +160 −0 src/everart/index.ts
  23. +32 −0 src/everart/package.json
  24. +10 −0 src/everart/tsconfig.json
  25. +22 −0 src/everything/Dockerfile
  26. +114 −2 src/everything/README.md
  27. +120 −1 src/everything/everything.ts
  28. +6 −4 src/everything/package.json
  29. +1 −0 src/fetch/.python-version
  30. +36 −0 src/fetch/Dockerfile
  31. +7 −0 src/fetch/LICENSE
  32. +136 −0 src/fetch/README.md
  33. +35 −0 src/fetch/pyproject.toml
  34. +24 −0 src/fetch/src/mcp_server_fetch/__init__.py
  35. +5 −0 src/fetch/src/mcp_server_fetch/__main__.py
  36. +285 −0 src/fetch/src/mcp_server_fetch/server.py
  37. +716 −0 src/fetch/uv.lock
  38. +25 −0 src/filesystem/Dockerfile
  39. +76 −3 src/filesystem/README.md
  40. +210 −10 src/filesystem/index.ts
  41. +9 −4 src/filesystem/package.json
  42. +29 −0 src/gdrive/Dockerfile
  43. +39 −3 src/gdrive/README.md
  44. +8 −7 src/gdrive/index.ts
  45. +4 −3 src/gdrive/package.json
  46. +5 −0 src/gdrive/replace_open.sh
  47. +38 −0 src/git/Dockerfile
  48. +189 −28 src/git/README.md
  49. +9 −3 src/git/pyproject.toml
  50. +10 −486 src/git/src/mcp_server_git/__init__.py
  51. +359 −0 src/git/src/mcp_server_git/server.py
  52. +30 −0 src/git/tests/test_server.py
  53. +181 −92 src/git/uv.lock
  54. +23 −0 src/github/Dockerfile
  55. +246 −6 src/github/README.md
  56. +89 −0 src/github/common/errors.ts
  57. +259 −0 src/github/common/types.ts
  58. +138 −0 src/github/common/utils.ts
  59. +3 −0 src/github/common/version.ts
  60. +231 −516 src/github/index.ts
  61. +112 −0 src/github/operations/branches.ts
  62. +26 −0 src/github/operations/commits.ts
  63. +219 −0 src/github/operations/files.ts
  64. +118 −0 src/github/operations/issues.ts
  65. +302 −0 src/github/operations/pulls.ts
  66. +65 −0 src/github/operations/repository.ts
  67. +45 −0 src/github/operations/search.ts
  68. +0 −551 src/github/package-lock.json
  69. +7 −3 src/github/package.json
  70. +0 −378 src/github/schemas.ts
  71. +24 −0 src/gitlab/Dockerfile
  72. +172 −0 src/gitlab/README.md
  73. +534 −0 src/gitlab/index.ts
  74. +31 −0 src/gitlab/package.json
  75. +325 −0 src/gitlab/schemas.ts
  76. +11 −0 src/gitlab/tsconfig.json
  77. +25 −0 src/google-maps/Dockerfile
  78. +59 −14 src/google-maps/README.md
  79. +162 −194 src/google-maps/index.ts
  80. +5 −4 src/google-maps/package.json
  81. +24 −0 src/memory/Dockerfile
  82. +59 −3 src/memory/README.md
  83. +17 −12 src/memory/index.ts
  84. +4 −3 src/memory/package.json
  85. +24 −0 src/postgres/Dockerfile
  86. +45 −4 src/postgres/README.md
  87. +3 −3 src/postgres/package.json
  88. +26 −0 src/puppeteer/Dockerfile
  89. +54 −1 src/puppeteer/README.md
  90. +166 −103 src/puppeteer/index.ts
  91. +3 −3 src/puppeteer/package.json
  92. +23 −0 src/redis/Dockerfile
  93. +80 −0 src/redis/README.md
  94. +28 −0 src/redis/package.json
  95. +236 −0 src/redis/src/index.ts
  96. +16 −0 src/redis/tsconfig.json
  97. +1 −0 src/sentry/.python-version
  98. +37 −0 src/sentry/Dockerfile
  99. +149 −0 src/sentry/README.md
  100. +17 −0 src/sentry/pyproject.toml
  101. +11 −0 src/sentry/src/mcp_server_sentry/__init__.py
  102. +4 −0 src/sentry/src/mcp_server_sentry/__main__.py
  103. +285 −0 src/sentry/src/mcp_server_sentry/server.py
  104. +439 −0 src/sentry/uv.lock
  105. +24 −0 src/sequentialthinking/Dockerfile
  106. +91 −0 src/sequentialthinking/README.md
  107. +278 −0 src/sequentialthinking/index.ts
  108. +32 −0 src/sequentialthinking/package.json
  109. +10 −0 src/sequentialthinking/tsconfig.json
  110. +25 −0 src/slack/Dockerfile
  111. +54 −16 src/slack/README.md
  112. +2 −2 src/slack/index.ts
  113. +4 −3 src/slack/package.json
  114. +1 −1 src/sqlite/.python-version
  115. +37 −0 src/sqlite/Dockerfile
  116. +71 −9 src/sqlite/README.md
  117. +3 −3 src/sqlite/pyproject.toml
  118. +0 −1 src/sqlite/src/mcp_server_sqlite/__init__.py
  119. +36 −30 src/sqlite/src/mcp_server_sqlite/server.py
  120. +90 −57 src/sqlite/uv.lock
  121. +1 −0 src/time/.python-version
  122. +36 −0 src/time/Dockerfile
  123. +215 −0 src/time/README.md
  124. +38 −0 src/time/pyproject.toml
  125. +19 −0 src/time/src/mcp_server_time/__init__.py
  126. +3 −0 src/time/src/mcp_server_time/__main__.py
  127. +201 −0 src/time/src/mcp_server_time/server.py
  128. +460 −0 src/time/test/time_server_test.py
  129. +489 −0 src/time/uv.lock
7 changes: 3 additions & 4 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -3,8 +3,8 @@
## Description

## Server Details
<!-- If modifying an existing server or adding a new one, provide details -->
- Server: <!-- e.g., filesystem, github, new-server-name -->
<!-- If modifying an existing server, provide details -->
- Server: <!-- e.g., filesystem, github -->
- Changes to: <!-- e.g., tools, resources, prompts -->

## Motivation and Context
@@ -18,7 +18,6 @@

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [ ] New MCP Server
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
@@ -27,7 +26,7 @@
## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes that apply. -->
- [ ] I have read the [MCP Protocol Documentation](https://modelcontextprotocol.io)
- [ ] My server follows MCP security best practices
- [ ] My changes follows MCP security best practices
- [ ] I have updated the server's README accordingly
- [ ] I have tested this with an LLM client
- [ ] My code follows the repository's style guidelines
221 changes: 221 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
name: Automatic Release Creation

on:
workflow_dispatch:
schedule:
- cron: '0 10 * * *'

jobs:
create-metadata:
runs-on: ubuntu-latest
outputs:
hash: ${{ steps.last-release.outputs.hash }}
version: ${{ steps.create-version.outputs.version}}
npm_packages: ${{ steps.create-npm-packages.outputs.npm_packages}}
pypi_packages: ${{ steps.create-pypi-packages.outputs.pypi_packages}}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Get last release hash
id: last-release
run: |
HASH=$(git rev-list --tags --max-count=1 || echo "HEAD~1")
echo "hash=${HASH}" >> $GITHUB_OUTPUT
echo "Using last release hash: ${HASH}"
- name: Install uv
uses: astral-sh/setup-uv@v5

- name: Create version name
id: create-version
run: |
VERSION=$(uv run --script scripts/release.py generate-version)
echo "version $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Create notes
run: |
HASH="${{ steps.last-release.outputs.hash }}"
uv run --script scripts/release.py generate-notes --directory src/ $HASH > RELEASE_NOTES.md
cat RELEASE_NOTES.md
- name: Release notes
uses: actions/upload-artifact@v4
with:
name: release-notes
path: RELEASE_NOTES.md

- name: Create python matrix
id: create-pypi-packages
run: |
HASH="${{ steps.last-release.outputs.hash }}"
PYPI=$(uv run --script scripts/release.py generate-matrix --pypi --directory src $HASH)
echo "pypi_packages $PYPI"
echo "pypi_packages=$PYPI" >> $GITHUB_OUTPUT
- name: Create npm matrix
id: create-npm-packages
run: |
HASH="${{ steps.last-release.outputs.hash }}"
NPM=$(uv run --script scripts/release.py generate-matrix --npm --directory src $HASH)
echo "npm_packages $NPM"
echo "npm_packages=$NPM" >> $GITHUB_OUTPUT
update-packages:
needs: [create-metadata]
if: ${{ needs.create-metadata.outputs.npm_packages != '[]' || needs.create-metadata.outputs.pypi_packages != '[]' }}
runs-on: ubuntu-latest
environment: release
outputs:
changes_made: ${{ steps.commit.outputs.changes_made }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@v5

- name: Update packages
run: |
HASH="${{ needs.create-metadata.outputs.hash }}"
uv run --script scripts/release.py update-packages --directory src/ $HASH
- name: Configure git
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "actions@github.com"
- name: Commit changes
id: commit
run: |
VERSION="${{ needs.create-metadata.outputs.version }}"
git add -u
if git diff-index --quiet HEAD; then
echo "changes_made=false" >> $GITHUB_OUTPUT
else
git commit -m 'Automatic update of packages'
git tag -a "$VERSION" -m "Release $VERSION"
git push origin "$VERSION"
echo "changes_made=true" >> $GITHUB_OUTPUT
fi
publish-pypi:
needs: [update-packages, create-metadata]
strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.create-metadata.outputs.pypi_packages) }}
name: Build ${{ matrix.package }}
environment: release
permissions:
id-token: write # Required for trusted publishing
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.create-metadata.outputs.version }}

- name: Install uv
uses: astral-sh/setup-uv@v5

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version-file: "src/${{ matrix.package }}/.python-version"

- name: Install dependencies
working-directory: src/${{ matrix.package }}
run: uv sync --frozen --all-extras --dev

- name: Run pyright
working-directory: src/${{ matrix.package }}
run: uv run --frozen pyright

- name: Build package
working-directory: src/${{ matrix.package }}
run: uv build

- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: src/${{ matrix.package }}/dist

publish-npm:
needs: [update-packages, create-metadata]
strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.create-metadata.outputs.npm_packages) }}
name: Build ${{ matrix.package }}
environment: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.create-metadata.outputs.version }}

- 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: Check if version exists on npm
working-directory: src/${{ matrix.package }}
run: |
VERSION=$(jq -r .version package.json)
if npm view --json | jq -e --arg version "$VERSION" '[.[]][0].versions | contains([$version])'; then
echo "Version $VERSION already exists on npm"
exit 1
fi
echo "Version $VERSION is new, proceeding with publish"
- name: Build package
working-directory: src/${{ matrix.package }}
run: npm run build

- name: Publish package
working-directory: src/${{ matrix.package }}
run: |
npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

create-release:
needs: [update-packages, create-metadata, publish-pypi, publish-npm]
if: needs.update-packages.outputs.changes_made == 'true'
runs-on: ubuntu-latest
environment: release
permissions:
contents: write
steps:
- uses: actions/checkout@v4

- name: Download release notes
uses: actions/download-artifact@v4
with:
name: release-notes

- name: Create release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN}}
run: |
VERSION="${{ needs.create-metadata.outputs.version }}"
gh release create "$VERSION" \
--title "Release $VERSION" \
--notes-file RELEASE_NOTES.md
- name: Docker MCP images
uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.DOCKER_TOKEN }}
repository: docker/labs-ai-tools-for-devs
event-type: build-mcp-images
client-payload: '{"ref": "${{ needs.create-metadata.outputs.version }}"}'
48 changes: 39 additions & 9 deletions .github/workflows/typescript.yml
Original file line number Diff line number Diff line change
@@ -9,25 +9,52 @@ on:
types: [published]

jobs:
build:
detect-packages:
runs-on: ubuntu-latest
outputs:
packages: ${{ steps.find-packages.outputs.packages }}
steps:
- uses: actions/checkout@v4
- name: Find JS packages
id: find-packages
working-directory: src
run: |
PACKAGES=$(find . -name package.json -not -path "*/node_modules/*" -exec dirname {} \; | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]')
echo "packages=$PACKAGES" >> $GITHUB_OUTPUT
build:
needs: [detect-packages]
strategy:
matrix:
package: ${{ fromJson(needs.detect-packages.outputs.packages) }}
name: Build ${{ matrix.package }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 18
node-version: 22
cache: npm

- run: npm ci
- run: npm run build
- name: Install dependencies
working-directory: src/${{ matrix.package }}
run: npm ci

- name: Build package
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
needs: build

strategy:
matrix:
package: ${{ fromJson(needs.detect-packages.outputs.packages) }}
name: Publish ${{ matrix.package }}

permissions:
contents: read
@@ -37,13 +64,16 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
node-version: 22
cache: npm
registry-url: "https://registry.npmjs.org"

- run: npm ci
- name: Install dependencies
working-directory: src/${{ matrix.package }}
run: npm ci

# TODO: Add --provenance once the repo is public
- run: npm run publish-all
- name: Publish package
working-directory: src/${{ matrix.package }}
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
30 changes: 30 additions & 0 deletions .github/workflows/version-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Version Consistency Check

on:
push:
branches:
- main
pull_request:
release:
types: [published]

jobs:
github:
name: Check GitHub server version consistency
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check version consistency
run: |
PACKAGE_VERSION=$(node -p "require('./src/github/package.json').version")
TS_VERSION=$(grep -o '".*"' ./src/github/common/version.ts | tr -d '"')
if [ "$PACKAGE_VERSION" != "$TS_VERSION" ]; then
echo "::error::Version mismatch detected!"
echo "::error::package.json version: $PACKAGE_VERSION"
echo "::error::version.ts version: $TS_VERSION"
exit 1
else
echo "✅ Versions match: $PACKAGE_VERSION"
fi
Loading