/**
* Resources Index
*
* Central registry for all MCP resources.
* Single source of truth - no duplication in routes.ts.
*/
import type { ResourceDefinition, ResourceMetadata, ResourceContext } from './types';
import { serverResources } from './server';
// Re-export types
export type { ResourceDefinition, ResourceMetadata, ResourceContext, ResourceContent } from './types';
/**
* All resources - single source of truth
* Add your custom resources by importing and spreading here
*/
export const ALL_RESOURCES: ResourceDefinition[] = [
...serverResources,
];
/**
* Register all resources with an MCP server.
*
* @param registerFn The server's resource method
* @param getContext Function to get resource context
*/
export function registerAllResources(
registerFn: (
name: string,
uri: string,
options: { description: string; mimeType: string },
handler: (uri: URL) => Promise<{ contents: Array<{ uri: string; mimeType: string; text: string }> }>
) => void,
getContext: () => ResourceContext | undefined
): void {
for (const resource of ALL_RESOURCES) {
registerFn(
resource.name,
resource.uri,
{
description: resource.description,
mimeType: resource.mimeType,
},
(uri) => resource.handler(uri, getContext())
);
}
}
/**
* Get metadata for all resources.
* Used by admin dashboard for display.
*/
export function getResourcesMetadata(): ResourceMetadata[] {
return ALL_RESOURCES.map(resource => ({
name: resource.name,
uri: resource.uri,
description: resource.description,
mimeType: resource.mimeType,
}));
}