mcp-framework
Version:
Framework for building Model Context Protocol (MCP) servers in Typescript
45 lines (44 loc) • 1.68 kB
JavaScript
import { logger } from '../../core/Logger.js';
export class ProtectedResourceMetadata {
config;
metadataJson;
constructor(config) {
if (!config.resource || config.resource.trim() === '') {
throw new Error('OAuth metadata requires a resource identifier');
}
if (!config.authorizationServers || config.authorizationServers.length === 0) {
throw new Error('OAuth metadata requires at least one authorization server');
}
for (const server of config.authorizationServers) {
if (!server || server.trim() === '') {
throw new Error('Authorization server URL cannot be empty');
}
try {
new URL(server);
}
catch {
throw new Error(`Invalid authorization server URL: ${server}`);
}
}
this.config = config;
const metadata = this.generateMetadata();
this.metadataJson = JSON.stringify(metadata, null, 2);
logger.debug(`ProtectedResourceMetadata initialized - resource: ${this.config.resource}, servers: ${this.config.authorizationServers.length}`);
}
generateMetadata() {
return {
resource: this.config.resource,
authorization_servers: this.config.authorizationServers,
};
}
toJSON() {
return this.metadataJson;
}
serve(res) {
logger.debug('Serving OAuth Protected Resource Metadata');
res.setHeader('Content-Type', 'application/json');
res.setHeader('Cache-Control', 'public, max-age=3600');
res.writeHead(200);
res.end(this.metadataJson);
}
}