Commit graph

4,184 commits

Author SHA1 Message Date
Connor Moss
abbbddb2e3
fix(memory): stop reporting deletions that did not happen (#4738)
delete_entities, delete_observations and delete_relations returned
success: true with a hardcoded "deleted successfully" message regardless
of what matched. An agent that mistypes an entity name is told its memory
is clean while the data is still on disk, and nothing in the response
contradicts that. addObservations throws for the same condition ten lines
above, so the file already disagreed with itself.

Staying quiet is deliberate and documented, so nothing throws and the
output schema is unchanged. The three manager methods now return what
they matched, and the handlers say so. A delete where everything is found
returns the same message it always did.

README updated: the three "Silent operation" bullets described the
absence of an error, which is still true, but read as if the response
said nothing either.
2026-09-02 18:34:53 -07:00
Amey Pawar
649af5856e
fix(memory): expand leading ~ in MEMORY_FILE_PATH to the home directory (#4447)
* fix(memory): expand leading ~ in MEMORY_FILE_PATH to the home directory

MCP clients pass MEMORY_FILE_PATH from JSON config, where no shell
expands a leading "~". Because path.isAbsolute("~/memory.jsonl") is
false, the value was joined onto the package directory, so the server
persisted to a literal "~" folder inside the install instead of the
user's intended location.

Add an expandHome() helper that mirrors the one already used by the
filesystem server (src/filesystem/path-utils.ts) and apply it in
ensureMemoryFilePath() before the existing absolute/relative resolution.
Absolute paths, relative paths, and a "~" not at the start are
unaffected. Adds unit tests for expandHome plus an end-to-end test
through ensureMemoryFilePath.

Addresses #1600

* test(memory): use a literal ~/ path in the tilde expansion test

path.join('~', ...) produces a backslash on Windows, which expandHome does
not match, so the test failed there.

---------

Co-authored-by: olaservo <olahungerford@gmail.com>
2026-09-02 18:15:44 -07:00
Nick Veenhof
242751e8ee
fix(memory): add trailing newline to JSONL output (#3653)
Co-authored-by: Nick Veenhof <nveenhof@gitlab.com>
Co-authored-by: olaservo <olahungerford@gmail.com>
2026-09-02 18:15:35 -07:00
Yufeng He
ba167cef5b
fix: declare zod runtime dependencies (#4289)
Co-authored-by: olaservo <olahungerford@gmail.com>
2026-09-02 18:15:26 -07:00
King Star
48723c95dc
fix(memory): reject dangling relations (#4477)
Signed-off-by: King Star <mcxin.y@gmail.com>
2026-09-02 08:04:34 -07:00
石岳峰
96c49c7364
fix(memory): read serverInfo.version from package.json (#4407)
Fixes #4406. The memory server previously hardcoded serverInfo.version as
"0.6.3", which no longer matched published calendar versions. Resolve
package.json from both source and dist layouts so Docker and npm installs
report the installed package version.

Co-authored-by: syf2211 <syf2211@users.noreply.github.com>
2026-09-02 08:04:28 -07:00
Yusufhan Sacak
cce08de417
fix(memory): resolve Vitest false positive for expected rejection (#3893)
Wrap the addObservations call in an async closure before asserting with
.rejects.toThrow(). This prevents Vitest's global unhandled rejection
handler from capturing the expected error before the assertion can
intercept it, eliminating the false-positive "Unhandled Errors" warning
that was failing CI.

Fixes #3073
2026-09-02 08:03:51 -07:00
Ola Hungerford
2e3e4c7ab7
ci: run readme-pr-check on pull_request_target so fork PRs can be labeled (#4739)
Observed on #4714 and #4726: addLabels returned 403 "Resource not
accessible by integration" because pull_request gives fork PRs a
read-only token. The job only calls the GitHub API and never checks
out PR code, so pull_request_target is safe here.


Claude-Session: https://claude.ai/code/session_01CK8vvB229h6orvkokG8YxU

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 20:01:29 -07:00
Abhinav Prakash
3aa19f5574
fix(git): unify git_log output schema and remove raise_exceptions from server.run (#4658) 2026-09-01 19:25:31 -07:00
Abhinav Prakash
579c3903f3
docs(brave-search): point to official @brave/brave-search-mcp-server package (#4714)
Fixes #4694
2026-08-31 09:22:36 -07:00
Yohanes
a6cdbf4dea
fix(filesystem): reject Windows paths on POSIX (#4704)
Co-authored-by: Yohanes <CryoThrust@users.noreply.github.com>
2026-08-30 14:43:38 -07:00
Trent Apple
ebaccfd623
fix: Containers - Bind Mounts - Security and Compatibility (Docker / Podman / SELinux) for Fetch, Git, and Time Servers (#2205)
* Update Dockerfile for fetch

Initial patch for podman and SELinux contexts.

* Update Dockerfile for time

podman and SELinux

* Update Dockerfile

* Also include app user / group (securely) such that the build succeeds

* Container app user optional add (#1)

* Update Dockerfile git

* Update Dockerfile fetch

* Update Dockerfile time

* Update Dockerfile

* Update Dockerfile

* Update Dockerfile

---------

Co-authored-by: Ola Hungerford <olahungerford@gmail.com>
2026-08-30 13:07:02 -07:00
Riley
cda92bdaac
fix(filesystem): create_directory doesn't create parent directories (#4631)
validatePath()'s ENOENT fallback checked only the immediate parent
directory before allowing a new path through. Creating a path with
more than one missing level (e.g. a/b/c when none of a, b, c exist)
made the immediate parent check fail with "Parent directory does not
exist", even though fs.mkdir was already called with recursive: true
one level up in the create_directory handler and an existing allowed
ancestor was available further up the tree.

Walk up through missing ancestors until an existing one is found (or
the filesystem root is reached), verifying that ancestor still
resolves inside an allowed directory via realpath. The top-level
lexical containment check already ran against the full target path,
so this only extends how far the existence/symlink check climbs.

Fixes #4629

Co-authored-by: Riley <313779891+rileybuilds@users.noreply.github.com>
Co-authored-by: olaservo <olahungerford@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 10:58:19 -07:00
Amir Fathi
d6402efee6
fix(sequentialthinking): restore nextThoughtNeeded in the advertised inputSchema required array (#4652)
* fix(sequentialthinking): restore nextThoughtNeeded in the advertised inputSchema required array

commit 1cdf806d (#3533) wrapped nextThoughtNeeded in a z.preprocess-based
coercedBoolean to fix a real footgun (string "false" coercing to true).
zod's toJSONSchema(..., { io: "input" }) treats a z.preprocess()-wrapped
field's input type as unknown, so it silently drops that field from the
emitted required array, even though it carries no .optional(). A client
that builds its call arguments from the advertised schema then omits
nextThoughtNeeded and gets a -32602 Invalid params from the runtime
validator, which still requires it.

Rebuild coercedBoolean as a transform on an explicit z.union([z.boolean(),
z.string()]) instead of z.preprocess. The union gives toJSONSchema a
concrete input type to report, so nextThoughtNeeded stays in required,
while parse behavior (including the case-insensitive string coercion
#3533 added) is unchanged.

Fixes #4651

* test(sequentialthinking): pin nextThoughtNeeded in required and string coercion

Runs against the built server so it checks the schema the SDK emits.
Skips when dist/ is absent, matching server-version.test.ts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Wo28CHPXyM3DHoLWvKnCK

---------

Co-authored-by: olaservo <olahungerford@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 10:57:34 -07:00
karl4c
40a8de87ed
fix(sequentialthinking): read server version from package.json (#4576)
* fix(sequentialthinking): read server version from package.json

Replace the hardcoded 0.2.0 so initialize serverInfo tracks the
package version (0.6.2 in-tree; CalVer after release), matching the
approach used for memory server version sync.

Skip the dist-layout assertion when dist/ is absent so CI's
test-before-build job (and local runs without prepare) still pass.

* test(sequentialthinking): smoke stdio initialize serverInfo.version

Spawn the built server over stdio and assert getServerVersion() matches
package.json (and is not the old hardcoded 0.2.0). Skip when dist/ is
absent so test-before-build CI still passes.
2026-08-28 10:01:24 -07:00
Excelius
11845d51cb
fix(filesystem): preserve UTF-8 across head and tail chunks (#4667) 2026-08-28 10:01:16 -07:00
KXH
cf05b37694
fix(filesystem): resolve Unicode-equivalent paths (#4638)
Signed-off-by: KXH <shepherdlaurie238@gmail.com>
2026-08-28 10:01:08 -07:00
Teddy100x
642a9112e7
fix(memory): write the knowledge graph atomically (#4642)
* fix(memory): write the knowledge graph atomically

`saveGraph()` wrote the graph straight to the memory file:

    await fs.writeFile(this.memoryFilePath, lines.join("\n"));

`fs.writeFile` opens the target with `'w'`, which truncates it before any
new bytes are written. If the process is interrupted between truncation
and completion — SIGKILL, container or host stop, OOM kill, power loss —
the memory file is left empty or half-written.

That file is the only persistence layer for the knowledge graph, so the
window is small but the loss is total and unrecoverable.

The fix writes to a temporary file in the same directory and renames it
over the target. `rename(2)` is atomic on POSIX filesystems: a reader
sees either the complete old file or the complete new one, never an
intermediate state. Keeping the temp file in the same directory ensures
the rename stays on one filesystem, since cross-device renames fail with
EXDEV. On failure the temp file is removed so no strays accumulate.

Tests added in `__tests__/atomic-save.test.ts`:

- the live memory file is never opened for truncating writes
- a committed graph survives a write that fails midway
- no temporary files remain after a successful write
- the temporary file is cleaned up when the rename fails
- graph contents still round-trip correctly across reloads

The first and fourth fail against the previous implementation.

Full suite: 55 passed (50 existing, 5 new). `tsc --noEmit` clean.

Fixes #4614

* fix(memory): use randomBytes for temp filename to avoid concurrent collision

---------

Co-authored-by: teddiesloco <teddiesloco@users.noreply.github.com>
2026-08-28 10:00:33 -07:00
eeshsaxena
18ce197639
fix(filesystem): make move_file fail instead of overwriting the destination (#4630)
The move_file tool description and README both state the operation fails if
the destination already exists, but the handler called fs.rename directly,
which silently overwrites the destination. Since this server ships no delete
tool, move_file effectively provided unadvertised, irreversible file
deletion: moving any file onto an existing target destroyed the target.

Add a moveFile helper in lib.ts that rejects when the destination already
exists (checked with lstat, so an existing symlink is detected rather than
followed) and only renames when the target is free, and use it from the
move_file handler. Behaviour now matches the documented contract.

Fixes #4628
2026-08-28 09:58:51 -07:00
drudiger
562feeb281
fix(filesystem): preserve file permissions during write and edit operations (#4115)
* fix(filesystem): preserve file permissions during write and edit operations

The atomic write pattern (write temp file + rename) replaces the original
inode, causing the new file to have default 0644 permissions regardless of
what the original file had. This breaks executable scripts and other files
with non-default permissions.

Fix: capture stat.mode before writing and restore it with chmod after rename.

Fixes both writeFileContent() and applyFileEdits().

* fix(filesystem): mask chmod mode and keep chmod failure from failing the write

Pass origStats.mode & 0o777 to chmod instead of the full st_mode. Move
the chmod out of the try whose catch unlinks the temp file and rethrows,
since rename has already succeeded by then. Add a test that an EPERM
from chmod does not reject the write.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Wo28CHPXyM3DHoLWvKnCK

---------

Co-authored-by: Dustin Rudiger <drudiger@apple.com>
Co-authored-by: olaservo <olahungerford@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-27 19:36:45 -07:00
Ryan Lopopolo
71e3cfbd1e
test(filesystem): add MCP SDK regression coverage for directory_tree (#3245)
* test(filesystem): add directory_tree MCP SDK regression coverage

* docs(filesystem): drop troubleshooting note from README
2026-08-27 19:17:32 -07:00
1060996408
781a93db14
fix(everything): remove dead code in template URI validation and subscription cleanup (#4104)
resources/templates.ts:
- `parseResourceId` had a guard that compared the URI against both
  `textUriBase` and `blobUriBase` with `&&`. Those prefixes are mutually
  exclusive, so the condition is always false and the branch is dead.
  Drop it; the SDK's template-based routing already guarantees the URI
  prefix is one of the two before the handler runs. The remaining
  positive-integer check on `resourceId` is preserved.

resources/subscriptions.ts:
- `sendSimulatedResourceUpdates` had an `else` branch that called
  `subscribers.delete(sessionId)` whenever the session wasn't in a URI's
  subscriber set, with a comment claiming the session had disconnected.
  That conclusion doesn't follow — a session not subscribed to URI A
  can still be subscribed to URI B — and the delete is a no-op when
  the element is absent anyway. Remove the branch.

No behavioral change. Existing 95 / 95 tests in `__tests__` still pass.

Co-authored-by: Jia Xuan <1060996408+jiaxuan@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-08-27 19:17:27 -07:00
nulone
8102fbe27a
fix(filesystem): handle negative values in formatSize() (#3231)
Return '0 B' for negative byte values instead of 'NaN B'.
File sizes cannot be negative, so this is a safe default.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-08-27 19:17:22 -07:00
Ola Hungerford
599dafc105
Merge pull request #4663 from olaservo/fix/python-cap-mcp-below-2
fix(python): require mcp>=1.29.0,<2 in fetch, git, and time
2026-08-18 09:02:46 -07:00
olaservo
d811ba11f1 docs(python): note the mcp 1.x requirement in fetch, git, and time
Users hitting the 2.0.0 startup failure land on the README first. Also makes
the three packages qualify for the next release: the release workflow selects
packages by .py/.ts/.md changes, so a dependency-only fix would merge without
publishing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 08:57:03 -07:00
olaservo
53dbe83b7a fix(python): require mcp>=1.29.0,<2 in fetch, git, and time
mcp 2.0.0 renamed McpError to MCPError and replaced the low-level Server
decorators with constructor handlers. The three servers had no upper bound,
so a fresh uvx install has resolved 2.0.0 since 2026-07-28 and failed to
start: fetch and time raise ImportError on the McpError import, git raises
AttributeError on server.list_tools().

The floor moves to 1.29.0, the last 1.x release. The previous floors (1.0.0
for git, 1.1.3 for fetch, 1.23.0 for time) resolved versions affected by
GHSA-vj7q-gjh5-988w, GHSA-jpw9-pfvf-9f58, and GHSA-hvrp-rf83-w775.

Porting to the v2 SDK is tracked separately.

Closes #4560
Closes #4570
Closes #4580

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 08:26:30 -07:00
Den Delimarsky
76d64c822f
Merge pull request #4527 from Joosboy/docs-everything-4096-references-formatting
docs(everything): fix markdown formatting and instructions file references
2026-07-29 16:09:46 -07:00
Den Delimarsky
1cd1096d29
Merge pull request #4591 from modelcontextprotocol/dependabot/npm_and_yarn/npm_and_yarn-f26b5a2147
chore(deps): bump @hono/node-server from 1.19.14 to 2.0.12 in the npm_and_yarn group across 1 directory
2026-07-29 15:09:50 -07:00
dependabot[bot]
d8cff7f016
chore(deps): bump @hono/node-server
Bumps the npm_and_yarn group with 1 update in the / directory: [@hono/node-server](https://github.com/honojs/node-server).


Updates `@hono/node-server` from 1.19.14 to 2.0.12
- [Release notes](https://github.com/honojs/node-server/releases)
- [Commits](https://github.com/honojs/node-server/compare/v1.19.14...v2.0.12)

---
updated-dependencies:
- dependency-name: "@hono/node-server"
  dependency-version: 2.0.12
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:07:16 +00:00
Den Delimarsky
7112282ce2
Merge pull request #4589 from modelcontextprotocol/dependabot/npm_and_yarn/npm_and_yarn-49aacb125d
chore(deps): bump the npm_and_yarn group across 1 directory with 6 updates
2026-07-29 15:06:23 -07:00
Den Delimarsky
76639ead0c
Merge pull request #4590 from modelcontextprotocol/dependabot/uv/src/git/uv-3eb4f0e641
chore(deps): bump the uv group across 3 directories with 4 updates
2026-07-29 15:05:57 -07:00
dependabot[bot]
3bcfedd8e4
chore(deps): bump the uv group across 3 directories with 4 updates
Bumps the uv group with 3 updates in the /src/git directory: [gitpython](https://github.com/gitpython-developers/GitPython), [mcp](https://github.com/modelcontextprotocol/python-sdk) and [pydantic-settings](https://github.com/pydantic/pydantic-settings).
Bumps the uv group with 2 updates in the /src/time directory: [mcp](https://github.com/modelcontextprotocol/python-sdk) and [pydantic-settings](https://github.com/pydantic/pydantic-settings).
Bumps the uv group with 2 updates in the /src/fetch directory: [mcp](https://github.com/modelcontextprotocol/python-sdk) and [soupsieve](https://github.com/facelessuser/soupsieve).


Updates `gitpython` from 3.1.50 to 3.1.54
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES)
- [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.50...3.1.54)

Updates `mcp` from 1.23.0 to 1.28.1
- [Release notes](https://github.com/modelcontextprotocol/python-sdk/releases)
- [Changelog](https://github.com/modelcontextprotocol/python-sdk/blob/main/RELEASE.md)
- [Commits](https://github.com/modelcontextprotocol/python-sdk/compare/v1.23.0...v1.28.1)

Updates `pydantic-settings` from 2.12.0 to 2.14.2
- [Release notes](https://github.com/pydantic/pydantic-settings/releases)
- [Commits](https://github.com/pydantic/pydantic-settings/compare/v2.12.0...v2.14.2)

Updates `mcp` from 1.25.0 to 1.28.1
- [Release notes](https://github.com/modelcontextprotocol/python-sdk/releases)
- [Changelog](https://github.com/modelcontextprotocol/python-sdk/blob/main/RELEASE.md)
- [Commits](https://github.com/modelcontextprotocol/python-sdk/compare/v1.23.0...v1.28.1)

Updates `pydantic-settings` from 2.12.0 to 2.14.2
- [Release notes](https://github.com/pydantic/pydantic-settings/releases)
- [Commits](https://github.com/pydantic/pydantic-settings/compare/v2.12.0...v2.14.2)

Updates `mcp` from 1.23.0 to 1.28.1
- [Release notes](https://github.com/modelcontextprotocol/python-sdk/releases)
- [Changelog](https://github.com/modelcontextprotocol/python-sdk/blob/main/RELEASE.md)
- [Commits](https://github.com/modelcontextprotocol/python-sdk/compare/v1.23.0...v1.28.1)

Updates `soupsieve` from 2.6 to 2.8.4
- [Release notes](https://github.com/facelessuser/soupsieve/releases)
- [Commits](https://github.com/facelessuser/soupsieve/compare/2.6...2.8.4)

---
updated-dependencies:
- dependency-name: gitpython
  dependency-version: 3.1.54
  dependency-type: direct:production
  dependency-group: uv
- dependency-name: mcp
  dependency-version: 1.28.1
  dependency-type: direct:production
  dependency-group: uv
- dependency-name: pydantic-settings
  dependency-version: 2.14.2
  dependency-type: indirect
  dependency-group: uv
- dependency-name: mcp
  dependency-version: 1.28.1
  dependency-type: direct:production
  dependency-group: uv
- dependency-name: pydantic-settings
  dependency-version: 2.14.2
  dependency-type: indirect
  dependency-group: uv
- dependency-name: mcp
  dependency-version: 1.28.1
  dependency-type: direct:production
  dependency-group: uv
- dependency-name: soupsieve
  dependency-version: 2.8.4
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:05:20 +00:00
dependabot[bot]
fd8248e56b
chore(deps): bump the npm_and_yarn group across 1 directory with 6 updates
Bumps the npm_and_yarn group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@hono/node-server](https://github.com/honojs/node-server) | `1.19.14` | `2.0.12` |
| [body-parser](https://github.com/expressjs/body-parser) | `2.2.2` | `2.3.0` |
| [brace-expansion](https://github.com/juliangruber/brace-expansion) | `5.0.6` | `5.0.8` |
| [fast-uri](https://github.com/fastify/fast-uri) | `3.1.2` | `3.1.4` |
| [hono](https://github.com/honojs/hono) | `4.12.25` | `4.12.32` |
| [postcss](https://github.com/postcss/postcss) | `8.5.15` | `8.5.25` |



Updates `@hono/node-server` from 1.19.14 to 2.0.12
- [Release notes](https://github.com/honojs/node-server/releases)
- [Commits](https://github.com/honojs/node-server/compare/v1.19.14...v2.0.12)

Updates `body-parser` from 2.2.2 to 2.3.0
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/v2.2.2...v2.3.0)

Updates `brace-expansion` from 5.0.6 to 5.0.8
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.6...v5.0.8)

Updates `fast-uri` from 3.1.2 to 3.1.4
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4)

Updates `hono` from 4.12.25 to 4.12.32
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.12.25...v4.12.32)

Updates `postcss` from 8.5.15 to 8.5.25
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.15...8.5.25)

---
updated-dependencies:
- dependency-name: "@hono/node-server"
  dependency-version: 2.0.12
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: body-parser
  dependency-version: 2.3.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: brace-expansion
  dependency-version: 5.0.8
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: fast-uri
  dependency-version: 3.1.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: hono
  dependency-version: 4.12.32
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.25
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:04:42 +00:00
Den Delimarsky
ced1408d3a
Merge pull request #4587 from modelcontextprotocol/dependabot/github_actions/astral-sh/setup-uv-7
chore(deps): bump astral-sh/setup-uv from 3 to 7
2026-07-29 15:04:23 -07:00
Den Delimarsky
20b5783d3b
Merge pull request #4586 from modelcontextprotocol/dependabot/github_actions/actions/download-artifact-8
chore(deps): bump actions/download-artifact from 7 to 8
2026-07-29 15:04:09 -07:00
Den Delimarsky
4852bb3fc4
Merge pull request #4585 from modelcontextprotocol/dependabot/github_actions/actions/upload-artifact-7
chore(deps): bump actions/upload-artifact from 6 to 7
2026-07-29 15:03:38 -07:00
Den Delimarsky
10962d3114
Merge pull request #4588 from modelcontextprotocol/dependabot/github_actions/actions/setup-node-7
chore(deps): bump actions/setup-node from 6 to 7
2026-07-29 15:03:19 -07:00
Den Delimarsky
7bdcdb6a85
Merge pull request #4584 from modelcontextprotocol/dependabot/github_actions/actions/setup-python-7
chore(deps): bump actions/setup-python from 6 to 7
2026-07-29 15:03:08 -07:00
dependabot[bot]
fab6abed58
chore(deps): bump actions/setup-node from 6 to 7
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:02:15 +00:00
dependabot[bot]
2e15194d4e
chore(deps): bump astral-sh/setup-uv from 3 to 7
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 3 to 7.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/v3...v7)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:02:12 +00:00
dependabot[bot]
42a1d825b1
chore(deps): bump actions/download-artifact from 7 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:02:08 +00:00
dependabot[bot]
40ce2f784e
chore(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:02:06 +00:00
dependabot[bot]
31bd12967f
chore(deps): bump actions/setup-python from 6 to 7
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6 to 7.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 22:02:03 +00:00
Den Delimarsky
86b9438e0e
Merge pull request #3243 from koic/enable_dependabot
Enable Dependabot
2026-07-29 15:01:28 -07:00
Mahadev Annabhimoju
63df72cb15 docs(everything): fix markdown formatting and instructions file references 2026-07-14 20:05:30 +05:30
Bryan Thompson
d31124c982
fix(filesystem): declare openWorldHint on all tools (#4480)
Every filesystem tool operates only on the local filesystem within its allowed
directories — none reaches an open or external world — but none declared the
MCP `openWorldHint` annotation, leaving open-world-hint coverage at 0/14. Set
`openWorldHint: false` on all 14 tools and document it in the README's tool
annotations section.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 10:15:49 -07:00
Bryan Thompson
97b70ee252
fix(filesystem): return valid MCP content type from read_media_file (#4029) (#4479)
* fix(filesystem): return valid MCP content type from read_media_file (#4029)

read_media_file returned a content block with type: "blob" for non-image/
non-audio files. "blob" is not a valid MCP content type (the union is
text | image | audio | resource_link | resource), so a strict client rejects
the result on schema validation.

Map the MIME type to a valid block: image/* -> image, audio/* -> audio, and
any other file type -> an embedded resource (the spec-correct carrier for
arbitrary bytes) with a pathToFileURL-encoded uri. Widen the tool's
outputSchema to the matching union and drop the now-unnecessary
`as unknown as CallToolResult` cast so tsc enforces the returned shape.

Tests cover the image, audio, and resource content types, verify the base64
blob round-trips to the original bytes, and assert the resource uri is
percent-encoded (space + non-ASCII) rather than a raw file:// concatenation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(filesystem): assert structuredContent mirrors content in read_media_file tests

The SDK validates content and structuredContent independently against the
outputSchema union, so a refactor that lets the two drift apart (e.g. a
stale image block in structuredContent while content carries the resource)
stays schema-valid and every test stays green. Mirror-equality assertions
on all four callTool cases close that gap (mutation-verified: a schema-valid
drifted structuredContent fails exactly these four assertions).

Also drops a vacuous .not.toBe('blob') assertion that could never add
signal, noting where the real "never blob" guard actually lives (the SDK
client's CallToolResultSchema rejection, upstream of any local assertion).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 10:15:03 -07:00
Alex Akimov
0e30ad18c7
Merge pull request #4173 from modelcontextprotocol/dependabot/uv/src/fetch/uv-c30c77f42d
chore(deps): bump urllib3 from 2.6.3 to 2.7.0 in /src/fetch in the uv group across 1 directory
2026-07-06 16:24:09 +02:00
Alex Akimov
f7221c4d02
Merge pull request #4429 from orbisai0security/fix-cve-2026-48526-pyjwt
fix: upgrade pyjwt to 2.13.0 (CVE-2026-48526)
2026-07-06 16:22:27 +02:00
Alex Akimov
55d256293f
Merge pull request #4455 from kingrubic/add-pypi-repo-links-3336
Link Python packages to their source directories
2026-07-06 16:20:00 +02:00