From 9a65da3e78bd92934db2759d3083cbf2791c5e67 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 17 Sep 2025 11:44:40 -0400 Subject: [PATCH 1/9] * In .github/workflows/release.yml - in create-release job condition - check for all combinations of publish results that should lead to a release creation - npm = success / pypi = skipped - npm = skipped / pypi = success - npm = success / pypi = success --- .github/workflows/release.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 64178c3ce8..26f3e4641b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -193,7 +193,12 @@ jobs: create-release: needs: [update-packages, create-metadata, publish-pypi, publish-npm] - if: needs.update-packages.outputs.changes_made == 'true' + if: | + needs.update-packages.outputs.changes_made == 'true' && + (always() && + (needs.publish-pypi.result == 'success' || needs.publish-pypi.result == 'skipped') && + (needs.publish-pypi.result == 'skipped' || needs.publish-npm.result == 'success') && + (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'success')) runs-on: ubuntu-latest environment: release permissions: From 7061c367c57420166f2b00701b14f8bd02cea102 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 17 Sep 2025 13:27:44 -0400 Subject: [PATCH 2/9] * In .github/workflows/release.yml - in create-release job condition - check for all combinations of publish results that should lead to a release creation - npm = success / pypi = skipped - npm = skipped / pypi = success - npm = success / pypi = success --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 26f3e4641b..bc8dc3d19f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -196,7 +196,7 @@ jobs: if: | needs.update-packages.outputs.changes_made == 'true' && (always() && - (needs.publish-pypi.result == 'success' || needs.publish-pypi.result == 'skipped') && + (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'skipped') && (needs.publish-pypi.result == 'skipped' || needs.publish-npm.result == 'success') && (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'success')) runs-on: ubuntu-latest From e5459186188e82ef1c7cc2eeb8a541acc1e0a1dd Mon Sep 17 00:00:00 2001 From: cliffhall Date: Wed, 17 Sep 2025 13:31:29 -0400 Subject: [PATCH 3/9] * In .github/workflows/release.yml - in create-release job condition - check for all combinations of publish results that should lead to a release creation - npm = success / pypi = skipped - npm = skipped / pypi = success - npm = success / pypi = success --- .github/workflows/release.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bc8dc3d19f..d1eba1dc64 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -194,11 +194,10 @@ jobs: create-release: needs: [update-packages, create-metadata, publish-pypi, publish-npm] if: | - needs.update-packages.outputs.changes_made == 'true' && - (always() && - (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'skipped') && - (needs.publish-pypi.result == 'skipped' || needs.publish-npm.result == 'success') && - (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'success')) + (needs.update-packages.outputs.changes_made == 'true' && always()) && + ((needs.publish-pypi.result == 'success' && needs.publish-npm.result == 'skipped') || + (needs.publish-pypi.result == 'skipped' && needs.publish-npm.result == 'success') || + (needs.publish-pypi.result == 'success' && needs.publish-npm.result == 'success')) runs-on: ubuntu-latest environment: release permissions: From 20430df0de5139af5e28fdcf267c518fe9c09d75 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Thu, 18 Sep 2025 15:39:00 -0400 Subject: [PATCH 4/9] * In .github/workflows/release.yml - in create-release job condition - simplify condition --- .github/workflows/release.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d1eba1dc64..a3189102da 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -194,10 +194,9 @@ jobs: create-release: needs: [update-packages, create-metadata, publish-pypi, publish-npm] if: | - (needs.update-packages.outputs.changes_made == 'true' && always()) && - ((needs.publish-pypi.result == 'success' && needs.publish-npm.result == 'skipped') || - (needs.publish-pypi.result == 'skipped' && needs.publish-npm.result == 'success') || - (needs.publish-pypi.result == 'success' && needs.publish-npm.result == 'success')) + always() && + needs.update-packages.outputs.changes_made == 'true' && + (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'success') runs-on: ubuntu-latest environment: release permissions: From 888184493cb8d6f2eaeb7ef368b588492ee22c90 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Thu, 18 Sep 2025 15:58:01 -0400 Subject: [PATCH 5/9] * In .github/workflows/release.yml - in create-release job condition - add comments about use of always --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a3189102da..0186ec86b7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -194,6 +194,8 @@ jobs: create-release: needs: [update-packages, create-metadata, publish-pypi, publish-npm] if: | + # Always evaluate this condition, even if a dependency failed + # Create a release if changes were made and at least one publish succeeded always() && needs.update-packages.outputs.changes_made == 'true' && (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'success') From 9280e8fa744f97e091de2c911d6910b92c1b6ff1 Mon Sep 17 00:00:00 2001 From: Cliff Hall Date: Thu, 18 Sep 2025 20:27:09 -0400 Subject: [PATCH 6/9] Remove comments that break release.yml (#2735) - remove comments that break CI. - github does not support comments, even though they are valid yaml --- .github/workflows/release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0186ec86b7..a3189102da 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -194,8 +194,6 @@ jobs: create-release: needs: [update-packages, create-metadata, publish-pypi, publish-npm] if: | - # Always evaluate this condition, even if a dependency failed - # Create a release if changes were made and at least one publish succeeded always() && needs.update-packages.outputs.changes_made == 'true' && (needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'success') From f8c05004d015735033eaab64ca4dacf160fb6432 Mon Sep 17 00:00:00 2001 From: Cliff Hall Date: Thu, 18 Sep 2025 20:28:41 -0400 Subject: [PATCH 7/9] Open CORS for any origin to allow direct browser connection (#2725) * * In src/everything/sse.ts - import cors - use cors with config allowing any origin + GET/POST * In src/everything/streamableHttp.ts - import cors - use cors with config allowing any origin + GET/POST/DELETE, and exposed protocol headers for client to read * In package.json and package-lock.json - add cors as a dependency * * In package.json and package-lock.json - add @types/cors as dev dependency * Add caution note for CORS origin wildcard usage Added caution note for using '*' in CORS origin. * * In streamableHttp.ts - remove remove unintentional console log * * In streamableHttp.ts - add comment about why opening cors for all routes * * In sse.ts - add comment about using * with caution in production for cors * * In sse.ts - indent on cors config --------- Co-authored-by: shaun smith <1936278+evalstate@users.noreply.github.com> --- package-lock.json | 12 ++++++++++++ src/everything/package.json | 2 ++ src/everything/sse.ts | 8 +++++++- src/everything/streamableHttp.ts | 13 +++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 34ecd5d41b..7a6e772c59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1376,6 +1376,16 @@ "@types/node": "*" } }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/diff": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.2.3.tgz", @@ -5819,6 +5829,7 @@ "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.18.0", + "cors": "^2.8.5", "express": "^4.21.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5" @@ -5827,6 +5838,7 @@ "mcp-server-everything": "dist/index.js" }, "devDependencies": { + "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "shx": "^0.3.4", "typescript": "^5.6.2" diff --git a/src/everything/package.json b/src/everything/package.json index c0a240de49..e388922d1a 100644 --- a/src/everything/package.json +++ b/src/everything/package.json @@ -23,11 +23,13 @@ }, "dependencies": { "@modelcontextprotocol/sdk": "^1.18.0", + "cors": "^2.8.5", "express": "^4.21.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5" }, "devDependencies": { + "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "shx": "^0.3.4", "typescript": "^5.6.2" diff --git a/src/everything/sse.ts b/src/everything/sse.ts index f201341948..f5b984e9b1 100644 --- a/src/everything/sse.ts +++ b/src/everything/sse.ts @@ -1,11 +1,17 @@ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; import express from "express"; import { createServer } from "./everything.js"; +import cors from 'cors'; console.error('Starting SSE server...'); const app = express(); - +app.use(cors({ + "origin": "*", // use "*" with caution in production + "methods": "GET,POST", + "preflightContinue": false, + "optionsSuccessStatus": 204, +})); // Enable CORS for all routes so Inspector can connect const transports: Map = new Map(); app.get("/sse", async (req, res) => { diff --git a/src/everything/streamableHttp.ts b/src/everything/streamableHttp.ts index c4fed73803..c5d0eeea65 100644 --- a/src/everything/streamableHttp.ts +++ b/src/everything/streamableHttp.ts @@ -3,10 +3,22 @@ import { InMemoryEventStore } from '@modelcontextprotocol/sdk/examples/shared/in import express, { Request, Response } from "express"; import { createServer } from "./everything.js"; import { randomUUID } from 'node:crypto'; +import cors from 'cors'; console.error('Starting Streamable HTTP server...'); const app = express(); +app.use(cors({ + "origin": "*", // use "*" with caution in production + "methods": "GET,POST,DELETE", + "preflightContinue": false, + "optionsSuccessStatus": 204, + "exposedHeaders": [ + 'mcp-session-id', + 'last-event-id', + 'mcp-protocol-version' + ] +})); // Enable CORS for all routes so Inspector can connect const transports: Map = new Map(); @@ -15,6 +27,7 @@ app.post('/mcp', async (req: Request, res: Response) => { try { // Check for existing session ID const sessionId = req.headers['mcp-session-id'] as string | undefined; + let transport: StreamableHTTPServerTransport; if (sessionId && transports.has(sessionId)) { From 4c9ff4e9831f7bed630da03ccc4d77ff517bc065 Mon Sep 17 00:00:00 2001 From: joshylchen <70675173+joshylchen@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:53:01 +0800 Subject: [PATCH 8/9] Add zettelkasten to README.md (#2718) * Update README.md ## Add Zettelkasten MCP Server This PR adds the Zettelkasten to the community servers list. ### Project Overview Comprehensive AI-powered knowledge management system that implements the proven Zettelkasten (slip-box) method with modern AI assistance. ### Key Features - **Atomic Note Management**: Create, organize, and connect atomic ideas - **AI-Powered Workflows**: CEQRC process for enhanced learning - **Full-Text Search**: SQLite FTS5 with advanced query syntax - **Intelligent Linking**: AI-suggested connections between notes - **Multiple Interfaces**: CLI, REST API, Streamlit UI, and MCP server - **Comprehensive Documentation**: Setup guides and examples included ### MCP Server Details - **Transport**: STDIO - **Tools**: 7 comprehensive tools for note management and AI workflows - **Dependencies**: OpenAI API (optional, has stub mode) - **Python**: 3.11+ with modern async/await patterns - **Setup**: Automated setup script with Claude Desktop config generation ### Repository Information - **URL**: https://github.com/joshylchen/zettelkasten - **License**: MIT - **Documentation**: Complete setup guide in `docs/MCP_SETUP.md` - **Tests**: Comprehensive test coverage included This server demonstrates sophisticated MCP patterns and provides real value for knowledge workers and researchers using AI assistants. * update Zettelkasten under community project --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f8fe5a0689..c7a0f7e8af 100644 --- a/README.md +++ b/README.md @@ -1268,6 +1268,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[YouTube Video Summarizer](https://github.com/nabid-pf/youtube-video-summarizer-mcp)** - Summarize lengthy youtube videos. - **[yutu](https://github.com/eat-pray-ai/yutu)** - A fully functional MCP server and CLI for YouTube to automate YouTube operation. - **[ZapCap](https://github.com/bogdan01m/zapcap-mcp-server)** - MCP server for ZapCap API providing video caption and B-roll generation via natural language +- **[Zettelkasten](https://github.com/joshylchen/zettelkasten)**- Comprehensive AI-powered knowledge management system implementing the Zettelkasten method. Features atomic note creation, full-text search, AI-powered CEQRC workflows (Capture→Explain→Question→Refine→Connect), intelligent link discovery, and multi-interface access (CLI, API, Web UI, MCP). Perfect for researchers, students, and knowledge workers. - **[ZincBind](https://github.com/QuentinCody/zincbind-mcp-server)** - Unofficial MCP server for ZincBind, providing access to a comprehensive database of zinc binding sites in proteins, structural coordination data, and metalloproteomics research information. - **[Zoom](https://github.com/Prathamesh0901/zoom-mcp-server/tree/main)** - Create, update, read and delete your zoom meetings. ## 📚 Frameworks From 19534fa89b9d5c28ec09b46661c489d5bfd3d406 Mon Sep 17 00:00:00 2001 From: Cameron Rye Date: Thu, 18 Sep 2025 21:54:17 -0400 Subject: [PATCH 9/9] docs: add Gopher MCP server to community servers (#2736) Add Gopher MCP server to the community servers list. Gopher MCP is a modern, cross-platform MCP server that enables AI assistants to browse and interact with both Gopher protocol and Gemini protocol resources safely and efficiently, bridging vintage and modern alternative internet protocols with AI assistants. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c7a0f7e8af..5b2f07fe7b 100644 --- a/README.md +++ b/README.md @@ -745,6 +745,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[Godot](https://github.com/Coding-Solo/godot-mcp)** - An MCP server providing comprehensive Godot engine integration for project editing, debugging, and scene management. - **[Golang Filesystem Server](https://github.com/mark3labs/mcp-filesystem-server)** - Secure file operations with configurable access controls built with Go! - **[Goodnews](https://github.com/VectorInstitute/mcp-goodnews)** - A simple MCP server that delivers curated positive and uplifting news stories. +- **[Gopher MCP](https://github.com/cameronrye/gopher-mcp)** - Modern, cross-platform MCP server that enables AI assistants to browse and interact with both Gopher protocol and Gemini protocol resources safely and efficiently. - **[Google Ads](https://github.com/gomarble-ai/google-ads-mcp-server)** - MCP server acting as an interface to the Google Ads, enabling programmatic access to Facebook Ads data and management features. - **[Google Analytics](https://github.com/surendranb/google-analytics-mcp)** - Google Analytics MCP Server to bring data across 200+ dimensions & metrics for LLMs to analyse. - **[Google Calendar](https://github.com/v-3/google-calendar)** - Integration with Google Calendar to check schedules, find time, and add/delete events