Commit Graph

3912 Commits

Author SHA1 Message Date
cliffhall
f561f70002 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated docs

* Refactor/renamed toggle-logging.ts to toggle-simulated-logging.ts
  - refactor/renamed registerToggleLoggingTool to registerToggleSimulatedLoggingTool
2025-12-13 10:59:35 -05:00
cliffhall
19e588bdcb [WIP] Refactor everything server to be more modular and use recommended APIs.
Updated structure.md
2025-12-13 10:20:16 -05:00
cliffhall
115789036a [WIP] Refactor everything server to be more modular and use recommended APIs.
Updated docs

* Refactor/renamed CLAUDE.md to AGENTS.md
* Updated instructions.md and startup.md
2025-12-13 10:03:21 -05:00
cliffhall
2093f2dfac [WIP] Refactor everything server to be more modular and use recommended APIs.
Updated README.md
2025-12-12 20:16:07 -05:00
cliffhall
9b25a3a41b [WIP] Refactor everything server to be more modular and use recommended APIs.
Finalized Roots list changed handling and initial request. Final fit and finish work.

* Updated architecture.md
  - Added links to other docs
  - Refactor/extracted sections into extension.md, features.md, how-it-works.md, startup.md, and structure.md

* Removed everything.ts
  - all features are ported

* In roots.ts
  - refactor/renaned setRootsListChangedHandler to syncRoots
  - refactor handler logic to requestRoots function
  - Calls for roots list directly to get initial list

* In server/index.ts
  - import setRootsListChangedHandler
  - in clientConnected callback
    - call setRootsListChangedHandler passing server and sessionId

* In sse.ts, stdio.ts, and streamableHttp.ts
  - update inline and function docs

* In index.ts,
  - updated usage output

* In server/index.ts
  - refactor/extracted readInstructions to resources/index.ts
  - defined ServerFactoryResponse response type
2025-12-12 20:12:18 -05:00
cliffhall
cb073d877a [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding Trigger Elicitation Request and Get Roots List tools

* Updated architecture.md

* Added roots.ts
  - tracks roots by sessionId
  - setRootsListChangedHandler
    - listens for roots changed notification from the client
      - updates the roots map by sessionId
      - sends log notification or error to the client

* In server/index.ts
  - import setRootsListChangedHandler
  - in clientConnected callback
    - call setRootsListChangedHandler passing server and sessionId

* In sse.ts, stdio.ts, and streamableHttp.ts
  - receive clientConnected from server factory
  - call clientConnected when server is connected to transport
* Added get-roots-list.ts
  - registerGetRootsListTool
    - Registers the 'get-roots-list' tool with the given MCP server.

* Added trigger-elicitation-request.ts
  - registerTriggerElicitationRequestTool
    - registered tool sends an elicitation request that exercises all supported field types

* In tools/index.ts
  - imports registerTriggerElicitationRequestTool and registerGetRootsListTool
  - in registerTools
    - call registerTriggerElicitationRequestTool and registerGetRootsListTool, passing server
2025-12-11 20:25:46 -05:00
cliffhall
18ef6aa69b [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding Trigger Elicitation Request and Get Roots List tools

* Updated architecture.md

* Added roots.ts
  - tracks roots by sessionId
  - setRootsListChangedHandler
    - listens for roots changed notification from the client
      - updates the roots map by sessionId
      - sends log notification or error to the client

* In server/index.ts
  - import setRootsListChangedHandler
  - in clientConnected callback
    - call setRootsListChangedHandler passing server and sessionId

* In sse.ts, stdio.ts, and streamableHttp.ts
  - receive clientConnected from server factory
  - call clientConnected when server is connected to transport
* Added get-roots-list.ts
  - registerGetRootsListTool
    - Registers the 'get-roots-list' tool with the given MCP server.

* Added trigger-elicitation-request.ts
  - registerTriggerElicitationRequestTool
    - registered tool sends an elicitation request that exercises all supported field types

* In tools/index.ts
  - imports registerTriggerElicitationRequestTool and registerGetRootsListTool
  - in registerTools
    - call registerTriggerElicitationRequestTool and registerGetRootsListTool, passing server
2025-12-11 20:25:37 -05:00
cliffhall
ea6fe271cd [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding Trigger Elicitation Request tool

* Updated architecture.md

* Added trigger-elicitation-request.ts
  - registerTriggerElicitationRequestTool
    - registered tool sends an elicitation request that exercises all supported field types

* In tools/index.ts
  - imports registerTriggerElicitationRequestTool
  - in registerTools
    - call registerTriggerElicitationRequestTool passing server
2025-12-11 18:10:37 -05:00
cliffhall
339e056ea0 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md

* Refactor/renamed get-sampling-request.ts to trigger-sampling-request.ts
  - use trigger instead of get throughout

* In tools/index.ts
  - sorted display order
2025-12-11 17:39:25 -05:00
cliffhall
2afc618ccd [WIP] Refactor everything server to be more modular and use recommended APIs.
[WIP] Adding Gzip File as Resource tool

* Updated architecture.md

* Added gzip-file-as-resource.ts
  - imports getSessionResourceURI and  registerSessionResource from session.ts
  - exports registerGZipFileAsResourceTool
    - the registered tool
      - validates the input URI
      - fetches the file safely
      - compresses it
      - creates and registers the resource
      - returns resource or resource link

* In tools/index.ts
  - import registerGZipFileAsResourceTool
  - in registerTools,
    - call registerGZipFileAsResourceTool passing server

* Added resources/session.ts
  - getSessionResourceURI gets a uri to the specified name
  - registerSessionResource registers the session-scoped resource and returns a resource link
2025-12-11 17:23:27 -05:00
cliffhall
3d003abacb [WIP] Refactor everything server to be more modular and use recommended APIs.
[WIP] Adding Gzip File as Resource tool

* Updated architecture.md

* In resources/files.ts
  - remove 'Docs: ' from resource name

* In resources/templates.ts
  - use blob instead of text in resource content
2025-12-11 17:04:50 -05:00
cliffhall
48bf94a728 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md

* Refactor/renamed sampling-request.ts to get-sampling-request.ts

* In tools/index.ts
  - sorted presenation order
2025-12-10 16:58:25 -05:00
cliffhall
7acadf4ac9 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md
2025-12-10 16:24:46 -05:00
cliffhall
f759d9eaa1 [WIP] Refactor everything server to be more modular and use recommended APIs.
For tools where we seek to get some response from the server, renamed as an action, e.g., "Get Sum" rather than "Add" or "Get Annotated Message" rather than "Annotated Message", so that it's clear what the intent of the tool is in a quick review.

* Updated architecture.md

* Refactor/renamed add.ts to get-sum.ts
* Refactor/renamed annotated-message.ts to get-annotated-message.ts
* In tools/index.ts
  - sorted presentation order
2025-12-10 16:08:41 -05:00
cliffhall
904d0ea71f [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding get-structured-content tool

* Updated architecture.md

* added get-structured-content.ts
  - Registers the 'get-structured-content' tool with the provided McpServer instance.
  - The registered tool processes incoming arguments using a predefined input schema,
    generates structured content with weather information including temperature,
    conditions, and humidity, and returns both backward-compatible content blocks
    and structured content in the response.
2025-12-09 20:11:29 -05:00
cliffhall
6cd26cf3df [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md
2025-12-09 19:26:34 -05:00
cliffhall
27793ac93a [WIP] Refactor everything server to be more modular and use recommended APIs.
* In get-env.ts
  - update tool description
2025-12-09 19:26:04 -05:00
cliffhall
03d3da0d55 [WIP] Refactor everything server to be more modular and use recommended APIs.
Refactor/rename `print-env` tool to `get-env`

* Updated architecture.md

* Refactor rename print-env.ts to get-env.ts

* In tools/index.ts
  - reorder tools alphabetically
2025-12-09 19:24:39 -05:00
cliffhall
8530747606 [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding the get-resource-reference and get-resource-reference tools

* Updated architecture.md

* Added get-resource-links.ts
  - Registers the 'get-resource-reference' tool with the provided McpServer instance.
  - The registered tool retrieves a specified number of resource links and their metadata.

* In get-resource-reference.ts
  - fixed tool description

* In tools/index.ts
  - import registerGetResourceLinksTool
  - in registerTool
    - call registerGetResourceLinksTool
2025-12-09 19:17:00 -05:00
cliffhall
320e3d8b25 [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding the get-resource-reference tool

* Updated architecture.md

* In prompts/resource.ts
  - Refactor/extracted the prompt argument completers into exported functions in resources/templates.ts
  - Refactor/extracted BLOB_TYPE, TEXT_TYPE, and resourceTypes into exported constants in resources/templates.ts as RESOURCE_TYPE_BLOB, RESOURCE_TYPE_TEXT, and RESOURCE_TYPES
  - In resources/templates.ts
    - refactor renamed index to resourceId throughout for consistency with prompts and tool references
* Added tools/get-resource-reference.ts
  - Registers the 'get-resource-reference' tool with the provided McpServer instance.
  - uses enum and number schema for tools to provide resourceType and resourceId arguments. Completables don't work for tool arguments.
  - Returns the corresponding dynamic resource
* In tools/index.ts
  - imported registerGetResourceReferenceTool
  - in registerTools
    - called registerGetResourceReferenceTool
2025-12-09 17:47:38 -05:00
cliffhall
328a990163 [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding the annotated message tool

* Updated architecture.md

* In annotated-message.ts
  - prettier
2025-12-09 16:56:00 -05:00
cliffhall
0bf6c6911d [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding the annotated message tool

* Updated architecture.md

* Added annotated-message.ts
  - registers a tool that returns a message with annotations on different content types

* In package.json
  - updated TS SDK version
2025-12-09 12:17:08 -05:00
cliffhall
2ce87b168c [WIP] Refactor everything server to be more modular and use recommended APIs.
* Added git-tiny-image.ts
  - registers a tool that returns a tiny MCP logo

* In all other tools, updated function docs
2025-12-09 10:17:37 -05:00
cliffhall
08b6a501ce [WIP] Refactor everything server to be more modular and use recommended APIs.
* In sampling-request.ts
  - renamed SampleLLMSchema to SamplingRequestSchema
2025-12-09 09:12:42 -05:00
cliffhall
df844b5298 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md
2025-12-08 19:14:45 -05:00
cliffhall
0f3e27ef87 [WIP] Refactor everything server to be more modular and use recommended APIs.
Added print-env, and sampling-request tools

* Updated architecture.md

* In tools/index.ts
  - import registerPrintEnvTool and registerSamplingRequestTool
  - in registerTools
    - call registerPrintEnvTool and registerSamplingRequestTool

* Added tools/print-env.ts
  - registers a tool that takes no args and returns the environment variables

* Added tools/sampling-request
  - registers a tool that
    - takes prompt and maxTokens args
    - sends client a sampling request
    - returns the client response in the result
2025-12-08 19:14:06 -05:00
cliffhall
1df8623bcc [WIP] Refactor everything server to be more modular and use recommended APIs.
Added long-running-operation tool and improved comments in all tools

* Updated architecture.md

* In tools/
  - add.ts
  - echo.ts
  - toggle-logging.ts
  - toggle-subscriber-updates.ts
    - Add better function and inline docs

* Added tools/long-running-operation.ts
  - similar implementation as in everything v1

* In tools/index.ts
  - import registerLongRunningOperationTool
  - in registerTools
    - registerLongRunningOperationTool
2025-12-08 17:55:04 -05:00
cliffhall
346c29a086 [WIP] Refactor everything server to be more modular and use recommended APIs.
Added tools to toggle simulated logging and resource updates on and off rather than have them start immediately upon connection

* Updated architecture.md

* In server/index.ts
  - remove import of beginSimulatedResourceUpdates and beginSimulatedLogging
  - remove clientConnected from createServer factory result

* In tools/index.ts
  - import registerToggleLoggingTool and registerToggleSubscriberUpdatesTool
  - in registerTools
    - call registerToggleLoggingTool and registerToggleSubscriberUpdatesTool

* In logging.ts
  - in beginSimulatedLogging
    - refactor extract inline interval callback into function sendSimulatedLoggingMessage
  - call sendSimulatedLoggingMessage right away to send the first message
  - supply sendSimulatedLoggingMessage as interval callback

* In subscriptions.ts
  - remove import of Transport
  - remove transports map
  - in beginSimulatedResourceUpdates()
    - change arguments to server and sessionId
    - check for the subsUpdateInterval for the session
    - remove all transport storage and interaction
    - instead use the server to send the notification
 - in stopSimulatedResourceUpdates()
   - remove management of transports map

* In stdio.ts, sse.ts, and streamableHttp.ts
  - remove destructure and calling of clientConnected

* Added tools/toggle-logging.ts
  - registers a tool that
    - takes no arguments
    - tracks clients that have been enabled by session id in a set
    - if client isn't enabled,
       - calls beginSimulatedLogging
       - adds session id to client set
    - else
      - calls stopSimulatedLogging
      - deletes session id from client set
    - returns a message explaining what was done including what to expect when logging is enabled

 * Added tools/toggle-subscriber-updates.ts
   - registers a tool that
     - takes no arguments
     - tracks clients that have been enabled by session id in a set
     - if client isn't enabled,
        - calls beginSimulatedResourceUpdates
        - adds session id to client set
     - else
       - calls stopSimulatedResourceUpdates
       - deletes session id from client set
     - returns a message explaining what was done including what to expect when logging is enabled
2025-12-08 17:13:42 -05:00
cliffhall
16ed05957c [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding simulated logging and refactoring subscriptions to not need to track transports

* Updated architecture.md

* In server/index.ts
  - remove import of Transport
  - import beginSimulatedLogging and stopSimulatedLogging
  - in clientConnected()
    - change argument to sessionId? instead of transport
    - add call to beginSimulatedLogging
    - send server and sessionId to beginSimulatedResourceUpdates and beginSimulatedLogging
  - in cleanup()
    - add call to stopSimulatedLogging passing sessionId

* Added server/logging.ts
  - Initialize logsUpdateIntervals to Map session ID to the interval for sending logging messages to the client
  - in beginSimulatedLogging()
    - create an array of logging meesages, customized with the sessionId if present
    - if the interval for the sessionId hasn't been set, create one, calling server.sendLoggingMessage with a random message to the client each time the interval elapses
  - in stopSimulatedLogging()
    - if a logging interval exists for the sessionId, clear it and remove it

* In subscriptions.ts
  - remove import of Transport
  - remove transports map
  - in beginSimulatedResourceUpdates()
    - change arguments to server and sessionId
    - check for the subsUpdateInterval for the session
    - remove all transport storage and interaction
    - instead use the server to send the notification
 - in stopSimulatedResourceUpdates()
   - remove management of transports map

* In sse.ts and streamableHttp.ts
  - when calling clientConnected, pass sessionId instead of transport

* In stdio.ts,
- when calling clientConnected, pass nothing instead of transport

* In subscriptions.ts
  - updated inline doc
2025-12-07 19:32:18 -05:00
cliffhall
8559fbd5a4 [WIP] Refactor everything server to be more modular and use recommended APIs.
* In subscriptions.ts
  - updated inline doc
2025-12-07 00:34:39 -05:00
cliffhall
07867a5dd5 [WIP] Refactor everything server to be more modular and use recommended APIs.
Adding resource subscriptions:

* Updated architecture.md

* In server/index.ts
  - imported Transport, setSubscriptionHandlers,beginSimulatedResourceUpdates, and stopSimulatedResourceUpdates
  - call setSubscriptionHandlers passing server
  - in returned object,
    - refactor/renamed startNotificationIntervals placehodler to clientConnected, which takes a transport argument and calls beginSimulatedResourceUpdates, passing the transport
    - replaced cleanup placeholder with a function that takes an optional sessionId and calls stopSimulatedResourceUpdates, passing the sessionId

* In sse.ts, stdio.ts, and streamableHttp.ts
  - when transport is connected, called clientConnect, passing transport
  - when disconnecting, called cleanup, passing sessionId

* Added subscriptions.ts
  - tracks subscriber session id lists by URI
  - tracks transport by session id
  - tracks subscription update intervals by sessionId
  - in setSubscriptionHandlers
    - set request handlers for SubscribeRequestSchema and UnsubscribeRequestSchema
  - in beginSimulatedResourceUpdates
    - starts an interval to send updates to the transport for all subscribed resources
  - in stopSimulatedResourceUpdates
    - removes intervals and transport for gien session id
2025-12-06 19:44:07 -05:00
cliffhall
7b2ff6b064 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md

* Refactor/renamed static.ts to file.ts

* Refactor/renamed complex.ts to args.ts

* Refactor/renamed template.ts to templates.ts.

* In resource.ts,
  -  improved registerEmbeddedResourcePrompt to allow selection of blob or text resource type.

* In file.ts
  - refactor/renamed registerStaticResources to registerFileResources to highlight the fact that it is using files as resources.

* In args.ts
  - refactor/renamed registerComplexPrompt to registerArgumentsPrompt to highlight the fact that it is demonstrating prompt arguments.

* Updated inline documentation throughout
2025-12-06 15:48:39 -05:00
cliffhall
9084cd3a96 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Ran prettier
2025-12-06 14:17:07 -05:00
cliffhall
0aeb8a794d [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md

* Refactor/renamed resources/dynamic.ts to resources/template.ts
  - refactor/renamed registerDynamicResources to registerResourceTemplates
    - this highlights the more salient fact that we are demonstrating registration of resource templates in this example.
  - exposed the ability to dynamically create the text resources from elsewhere (namely the resource-prompt example

* Added prompts/resource.ts
  - in registerEmbeddedResourcePrompt()
    - register a prompt that takes a resourceId and returns the prompt with the corresponding dynamically created resource embedded
2025-12-06 12:50:09 -05:00
cliffhall
743529180e [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md

* Refactor / renamed uris from test://X/resource/Y to demo://resource/X/Y
2025-12-05 18:54:30 -05:00
cliffhall
eee9866ebb [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md

* Refactor / renamed all addXPrompt, addXTool, and addXResource functions to registerX...

* Added the add tool
2025-12-05 18:43:36 -05:00
cliffhall
d868b1c8ac [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md
2025-12-05 16:22:59 -05:00
cliffhall
daec74fbc1 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Adding prompts (simple, complex, with completions)

* Add prompts/simple.ts
  - in addSimplePrompt()
    - register a simple prompt with no arguments

* Add prompts/complex.ts
  - in addComplexPrompt()
    - define promptArgsSchema containing a required city arg of type string and an optional state arg of type state
    - register the complex prompt with a prompt callback that combines the city and state into a prompt asking for the weather in that location

* Add prompts/completions.ts
  - in addPromptWithCompletions()
    - define promptArgsSchema containing department and name string fields with completion handlers
    - register the completable prompt with a prompt callback that combines the inputs into a prompt asking to promote the selected name to head of the selected department

* Add prompts/index.ts
  - import addSimplePrompt, addComplexPrompt, and addPromptWithCompletions
  - export registerPrompts function
  - in registerPrompts()
    - call addSimplePrompt
    - call addComplexPrompt
    - call addPromptWithCompletions

* In package.json
  - add prettier devDependency
  - add prettier:check script
  - add prettier:fix script
  - in build script, copy docs folder to dist

* All other changes were prettier formatting
2025-12-05 16:09:35 -05:00
cliffhall
1c64b36c78 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Adding static resources, move server instructions to
the new docs folder, and add code formatting

* Add docs folder

* Add docs/architecture.md which describes the architecture of the project thus far.

* Refactor moved instructions.md to docs/server-instructions.md

* Add resources/static.ts
  - in addStaticResources()
    - read the file entries from the docs folder
    - register each file as a resource (no template), with a readResource function that reads the file and returns it in a contents block with the appropriate mime type and contents
  - getMimeType helper function gets the mime type for a filename
  - readSafe helper function reads the file synchronously as utf-8 or returns an error string

* Add resources/index.ts
  - import addStaticResources
  - export registerResources function
  - in registerResources()
    - call addStaticResources

* In package.json
  - add prettier devDependency
  - add prettier:check script
  - add prettier:fix script
  - in build script, copy docs folder to dist

* All other changes were prettier formatting
2025-12-05 13:26:08 -05:00
cliffhall
8845118d61 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Adding dynamic resources

* Add server/index.js
  - import registerResources from resources/index.js
  - in createServer()
    - call registerResources, passing server

* Add resources/dynamic.ts
  - in addDynamicResources()
    - define formatGmtTimestamp to create a time stamp to include in the resource text or encoded blob
    - define parseIndex to ensure the index variable of the URI is a number

* Add resources/index.ts
  - import addDynamicResources
  - export registerResources function
  - in registerResources()
    - call addDynamicResources

* In package.json
  - update the start commands to launch each of the transports properly
2025-12-04 19:01:18 -05:00
cliffhall
5de886ca63 [WIP] Refactor everything server to be more modular and use recommended APIs
In src/everything:

* Refactor / move streamableHttp.ts, sse.ts, and stdio.ts to transports/

* Move everything.ts to server/ for reference

* Add server/index.js
  - exports the createServer function
  - import registerTools from tools/index.js
  - in createServer()
    - read instructions.md and include in ServerOptions for McpServer constructor
    - construct McpServer instead of Server
    - call registerTools, passing server

* Add tools/echo.ts
  - define EchoSchema
  - define tool config
  - export addToolEcho function
  - in addToolEcho()
    - register handler for Echo tool

* Add tools/index.ts
  - import addToolEcho
  - export registerTools function
  - in registerTools()
    - call addToolEcho
2025-12-03 17:36:47 -05:00
Koichi ITO
b7e1cf3a79 Merge pull request #3096 from modelcontextprotocol/dependabot/npm_and_yarn/npm_and_yarn-68057ba13a
chore(deps): bump @modelcontextprotocol/sdk from 1.23.0 to 1.24.0 in the npm_and_yarn group across 1 directory
2025-12-03 07:15:42 +09:00
dependabot[bot]
1c654a4e7d chore(deps): bump @modelcontextprotocol/sdk
Bumps the npm_and_yarn group with 1 update in the / directory: [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk).


Updates `@modelcontextprotocol/sdk` from 1.23.0 to 1.24.0
- [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases)
- [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/1.23.0...1.24.0)

---
updated-dependencies:
- dependency-name: "@modelcontextprotocol/sdk"
  dependency-version: 1.24.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-02 17:40:23 +00:00
Koichi ITO
7a21d7c460 Merge pull request #3095 from modelcontextprotocol/dependabot/npm_and_yarn/npm_and_yarn-6c4b93b8de
chore(deps): bump express from 4.21.2 to 4.22.0 in the npm_and_yarn group across 1 directory
2025-12-02 12:39:41 +09:00
dependabot[bot]
8dbea85ccf chore(deps): bump express in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [express](https://github.com/expressjs/express).


Updates `express` from 4.21.2 to 4.22.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.22.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.2...4.22.0)

---
updated-dependencies:
- dependency-name: express
  dependency-version: 4.22.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-01 22:17:03 +00:00
Carney Wu
d1d6a123c6 add useless toolkit mcp servers (#3071)
* add useless toolkit mcp servers

* change postion

move from community group to official group

* Move Toolkit from official group to community group

Move Toolkit from official group to community group
2025-11-27 10:01:03 +00:00
mrumm
300012c689 Add AI Endurance MCP server to README (#3042)
* Add AI Endurance MCP server to README: AI-powered training platform for endurance athletes with 20 tools including workout management, activity analysis, performance predictions, and recovery tracking. Supports cycling, running, and triathlon.

* Move AI Endurance to community servers
2025-11-27 10:00:56 +00:00
Lex Vorona
9b91729fe4 Add Atono MCP Server to the list (#3069)
* Add Atono MCP to the list

* Shorten the description
2025-11-26 18:36:07 +00:00
Ola Hungerford
8b80372f4e Merge pull request #3078 from olaservo/add-mcp-docs-server
Add MCP docs server to Claude Code GitHub Action
2025-11-26 10:42:36 -07:00
Vatsa Shah
1abe62ef6d Add Uno Platform MCP (#3070)
* Add Uno Platform MCP

* Update logo and description
2025-11-26 17:07:44 +00:00