v2: move registered primitives to classes
#1453
Open
+1,266
−408
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Refactor RegisteredTool, RegisteredPrompt, RegisteredResource to proper classes
Motivation and Context
The
RegisteredTool,RegisteredPrompt,RegisteredResource, andRegisteredResourceTemplatetypes were previously plain object types. This refactoring converts them to proper classes with:#syntax for encapsulationupdate()method usingObject.assignfor protocol fieldsMcpServerMcpServerto retrieve all registered itemsiconssupport toRegisteredTool(for parity with protocolTooltype)How Has This Been Tested?
pnpm lint:fix:all- passespnpm typecheck:all- passespnpm test:all- 487 tests passingBreaking Changes
Yes, users will need to update their code:
paramsSchemainputSchemaRegisteredTool.update()callbackhandlerRegisteredTool.update()Note: In v1, the
RegisteredTool.update()method usedparamsSchemawhich did not match theinputSchemafield used inregisterTool(). This inconsistency has been fixed in v2 — both now useinputSchema.New getter methods on
McpServer:mcpServer.tools→ReadonlyMap<string, RegisteredTool>mcpServer.prompts→ReadonlyMap<string, RegisteredPrompt>mcpServer.resources→ReadonlyMap<string, RegisteredResource>mcpServer.resourceTemplates→ReadonlyMap<string, RegisteredResourceTemplate>Types of changes
Checklist
Additional context
New file structure
Key design decisions
#: Uses JavaScript private class fields for true encapsulation#protocolFieldsobject, SDK-specific fields stored separatelyObject.assign(this.#protocolFields, protocolUpdates)so new protocol fields automatically workonUpdate,onRename,onRemovecallbacks for communicating state changes toMcpServerOmitto automatically include new fields