get-revision
Retrieve specific revisions of wiki pages to access historical content, view changes, or analyze edit history with optional metadata and content formats.
Instructions
Returns a revision of a wiki page.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| revisionId | Yes | Revision ID | |
| content | No | Type of content to return | source |
| metadata | No | Whether to include metadata (revision ID, page ID, page title, user ID, user name, timestamp, comment, size, delta, minor, HTML URL) in the response |
Implementation Reference
- src/tools/get-revision.ts:30-58 (handler)Primary handler function that validates parameters, fetches revision data from the REST API, and returns formatted content or error response.async function handleGetRevisionTool( revisionId: number, content: ContentFormat, metadata: boolean ): Promise<CallToolResult> { if ( content === ContentFormat.none && !metadata ) { return { content: [ { type: 'text', text: 'When content is set to "none", metadata must be true' } ], isError: true }; } try { const data = await makeRestGetRequest<MwRestApiRevisionObject>( `/v1/revision/${ revisionId }${ getSubEndpoint( content ) }` ); return { content: getRevisionToolResult( data, content, metadata ) }; } catch ( error ) { return { content: [ { type: 'text', text: `Failed to retrieve revision data: ${ ( error as Error ).message }` } as TextContent ], isError: true }; } }
- src/tools/get-revision.ts:15-18 (schema)Input schema definition for the tool using Zod, including revisionId, optional content format, and optional metadata flag.revisionId: z.number().int().positive().describe( 'Revision ID' ), content: z.nativeEnum( ContentFormat ).describe( 'Type of content to return' ).optional().default( ContentFormat.source ), metadata: z.boolean().describe( 'Whether to include metadata (revision ID, page ID, page title, user ID, user name, timestamp, comment, size, delta, minor, HTML URL) in the response' ).optional().default( false ) },
- src/tools/get-revision.ts:10-28 (registration)Registers the 'get-revision' tool on the MCP server with name, description, schema, annotations, and handler lambda.export function getRevisionTool( server: McpServer ): RegisteredTool { return server.tool( 'get-revision', 'Returns a revision of a wiki page.', { revisionId: z.number().int().positive().describe( 'Revision ID' ), content: z.nativeEnum( ContentFormat ).describe( 'Type of content to return' ).optional().default( ContentFormat.source ), metadata: z.boolean().describe( 'Whether to include metadata (revision ID, page ID, page title, user ID, user name, timestamp, comment, size, delta, minor, HTML URL) in the response' ).optional().default( false ) }, { title: 'Get revision', readOnlyHint: true, destructiveHint: false } as ToolAnnotations, async ( { revisionId, content, metadata } ) => handleGetRevisionTool( revisionId, content, metadata ) ); }
- src/tools/get-revision.ts:60-96 (helper)Helper function that formats the API response into an array of TextContent based on content type and metadata requirements.function getRevisionToolResult( result: MwRestApiRevisionObject, content: ContentFormat, metadata: boolean ): TextContent[] { if ( content === ContentFormat.source && !metadata ) { return [ { type: 'text', text: result.source ?? 'Not available' } ]; } if ( content === ContentFormat.html && !metadata ) { return [ { type: 'text', text: result.html ?? 'Not available' } ]; } const results: TextContent[] = [ getRevisionMetadataTextContent( result ) ]; if ( result.source !== undefined ) { results.push( { type: 'text', text: `Source:\n${ result.source }` } ); } if ( result.html !== undefined ) { results.push( { type: 'text', text: `HTML:\n${ result.html }` } ); } return results; }
- src/tools/index.ts:41-51 (registration)Top-level registration function that invokes all tool registrars, including getRevisionTool, on the MCP server.export function registerAllTools( server: McpServer ): RegisteredTool[] { const registeredTools: RegisteredTool[] = []; for ( const registrar of toolRegistrars ) { try { registeredTools.push( registrar( server ) ); } catch ( error ) { console.error( `Error registering tool: ${ ( error as Error ).message }` ); } } return registeredTools; }