diff --git a/README.md b/README.md
index 8681cdd0..d4735905 100644
--- a/README.md
+++ b/README.md
@@ -109,7 +109,7 @@ Official integrations are maintained by companies building production ready MCP
-
**[BrowserStack](https://github.com/browserstack/mcp-server)** - Access BrowserStack's [Test Platform](https://www.browserstack.com/test-platform) to debug, write and fix tests, do accessibility testing and more.
-
**[Bucket](https://github.com/bucketco/bucket-javascript-sdk/tree/main/packages/cli#model-context-protocol)** - Flag features, manage company data, and control feature access using [Bucket](https://bucket.co)
-
**[Buildkite](https://github.com/buildkite/buildkite-mcp-server)** - Exposing Buildkite data (pipelines, builds, jobs, tests) to AI tooling and editors.
--
**[Buildable](https://github.com/chunkydotdev/bldbl-mcp)** (Typescript) - Official MCP server for Buildable AI-powered development platform. Enables AI assistants to manage tasks, track progress, get project context, and collaborate with humans on software projects.
+-
**[Buildable](https://github.com/chunkydotdev/bldbl-mcp)** (TypeScript) - Official MCP server for Buildable AI-powered development platform. Enables AI assistants to manage tasks, track progress, get project context, and collaborate with humans on software projects.
-
**[BuiltWith](https://github.com/builtwith/mcp)** - Identify the technology stack behind any website.
-
**[Burp Suite](https://github.com/PortSwigger/mcp-server)** - MCP Server extension allowing AI clients to connect to [Burp Suite](https://portswigger.net)
-
**[Campertunity](https://github.com/campertunity/mcp-server)** - Search campgrounds around the world on campertunity, check availability, and provide booking links.
@@ -1067,7 +1067,7 @@ These are high-level frameworks that make it easier to build MCP servers or clie
* **[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-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.
* **[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.
@@ -1078,7 +1078,7 @@ These are high-level frameworks that make it easier to build MCP servers or clie
* **[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.
+* **[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.
* **[Hermes MCP](https://github.com/cloudwalk/hermes-mcp)** (Elixir) - A high-performance and high-level Model Context Protocol (MCP) implementation in Elixir. Think like "Live View" for MCP.
@@ -1144,7 +1144,7 @@ Additional resources on MCP.
## 🚀 Getting Started
### Using MCP Servers in this Repository
-Typescript-based servers in this repository can be used directly with `npx`.
+TypeScript-based servers in this repository can be used directly with `npx`.
For example, this will start the [Memory](src/memory) server:
```sh
diff --git a/src/everything/everything.ts b/src/everything/everything.ts
index f1a2a11d..26e43521 100644
--- a/src/everything/everything.ts
+++ b/src/everything/everything.ts
@@ -209,18 +209,6 @@ export const createServer = () => {
}, 20000);
- // Set up update interval for stderr messages
- stdErrUpdateInterval = setInterval(() => {
- const shortTimestamp = new Date().toLocaleTimeString([], {
- hour: "2-digit",
- minute: "2-digit",
- second: "2-digit"
- });
- server.notification({
- method: "notifications/stderr",
- params: { content: `${shortTimestamp}: A stderr message` },
- });
- }, 30000);
// Helper method to request sampling from client
const requestSampling = async (
diff --git a/src/memory/README.md b/src/memory/README.md
index 5b18d841..dc6888b8 100644
--- a/src/memory/README.md
+++ b/src/memory/README.md
@@ -276,6 +276,8 @@ Docker:
docker build -t mcp/memory -f src/memory/Dockerfile .
```
+For Awareness: a prior mcp/memory volume contains an index.js file that could be overwritten by the new container. If you are using a docker volume for storage, delete the old docker volume's `index.js` file before starting the new container.
+
## License
This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
diff --git a/src/memory/index.ts b/src/memory/index.ts
index b7993a3a..4590a1db 100644
--- a/src/memory/index.ts
+++ b/src/memory/index.ts
@@ -376,6 +376,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
+ if (name === "read_graph") {
+ return { content: [{ type: "text", text: JSON.stringify(await knowledgeGraphManager.readGraph(), null, 2) }] };
+ }
+
if (!args) {
throw new Error(`No arguments provided for tool: ${name}`);
}
@@ -396,8 +400,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
case "delete_relations":
await knowledgeGraphManager.deleteRelations(args.relations as Relation[]);
return { content: [{ type: "text", text: "Relations deleted successfully" }] };
- case "read_graph":
- return { content: [{ type: "text", text: JSON.stringify(await knowledgeGraphManager.readGraph(), null, 2) }] };
case "search_nodes":
return { content: [{ type: "text", text: JSON.stringify(await knowledgeGraphManager.searchNodes(args.query as string), null, 2) }] };
case "open_nodes":
diff --git a/src/time/test/time_server_test.py b/src/time/test/time_server_test.py
index 8129fb5b..97a6ea1f 100644
--- a/src/time/test/time_server_test.py
+++ b/src/time/test/time_server_test.py
@@ -2,8 +2,10 @@
from freezegun import freeze_time
from mcp.shared.exceptions import McpError
import pytest
+from unittest.mock import patch
+from zoneinfo import ZoneInfo
-from mcp_server_time.server import TimeServer
+from mcp_server_time.server import TimeServer, get_local_tz
@pytest.mark.parametrize(
@@ -458,3 +460,69 @@ def test_convert_time(test_time, source_tz, time_str, target_tz, expected):
assert result.source.is_dst == expected["source"]["is_dst"]
assert result.target.is_dst == expected["target"]["is_dst"]
assert result.time_difference == expected["time_difference"]
+
+
+def test_get_local_tz_with_override():
+ """Test that timezone override works correctly."""
+ result = get_local_tz("America/New_York")
+ assert str(result) == "America/New_York"
+ assert isinstance(result, ZoneInfo)
+
+
+def test_get_local_tz_with_invalid_override():
+ """Test that invalid timezone override raises an error."""
+ with pytest.raises(Exception): # ZoneInfo will raise an exception
+ get_local_tz("Invalid/Timezone")
+
+
+@patch('mcp_server_time.server.get_localzone_name')
+def test_get_local_tz_with_valid_iana_name(mock_get_localzone):
+ """Test that valid IANA timezone names from tzlocal work correctly."""
+ mock_get_localzone.return_value = "Europe/London"
+ result = get_local_tz()
+ assert str(result) == "Europe/London"
+ assert isinstance(result, ZoneInfo)
+
+
+@patch('mcp_server_time.server.get_localzone_name')
+def test_get_local_tz_when_none_returned(mock_get_localzone):
+ """Test error when tzlocal returns None."""
+ mock_get_localzone.return_value = None
+ with pytest.raises(McpError, match="Could not determine local timezone"):
+ get_local_tz()
+
+
+@patch('mcp_server_time.server.get_localzone_name')
+def test_get_local_tz_handles_windows_timezones(mock_get_localzone):
+ """Test that tzlocal properly handles Windows timezone names.
+
+ Note: tzlocal should convert Windows names like 'Pacific Standard Time'
+ to proper IANA names like 'America/Los_Angeles'.
+ """
+ # tzlocal should return IANA names even on Windows
+ mock_get_localzone.return_value = "America/Los_Angeles"
+ result = get_local_tz()
+ assert str(result) == "America/Los_Angeles"
+ assert isinstance(result, ZoneInfo)
+
+
+@pytest.mark.parametrize(
+ "timezone_name",
+ [
+ "America/New_York",
+ "Europe/Paris",
+ "Asia/Tokyo",
+ "Australia/Sydney",
+ "Africa/Cairo",
+ "America/Sao_Paulo",
+ "Pacific/Auckland",
+ "UTC",
+ ],
+)
+@patch('mcp_server_time.server.get_localzone_name')
+def test_get_local_tz_various_timezones(mock_get_localzone, timezone_name):
+ """Test various timezone names that tzlocal might return."""
+ mock_get_localzone.return_value = timezone_name
+ result = get_local_tz()
+ assert str(result) == timezone_name
+ assert isinstance(result, ZoneInfo)