Skip to main content
Glama

MCP Specification Server

by MCPJam
23
6
  • Apple
StreamReader.js•2.5 kB
import { AbortError, } from './Errors.js'; import { Deferred } from './Deferred.js'; import { AbstractStreamReader } from "./AbstractStreamReader.js"; /** * Node.js Readable Stream Reader * Ref: https://nodejs.org/api/stream.html#readable-streams */ export class StreamReader extends AbstractStreamReader { constructor(s) { super(); this.s = s; /** * Deferred used for postponed read request (as not data is yet available to read) */ this.deferred = null; if (!s.read || !s.once) { throw new Error('Expected an instance of stream.Readable'); } this.s.once('end', () => { this.endOfStream = true; if (this.deferred) { this.deferred.resolve(0); } }); this.s.once('error', err => this.reject(err)); this.s.once('close', () => this.abort()); } /** * Read chunk from stream * @param buffer Target Uint8Array (or Buffer) to store data read from stream in * @param mayBeLess - If true, may fill the buffer partially * @returns Number of bytes read */ async readFromStream(buffer, mayBeLess) { if (buffer.length === 0) return 0; const readBuffer = this.s.read(buffer.length); if (readBuffer) { buffer.set(readBuffer); return readBuffer.length; } const request = { buffer, mayBeLess, deferred: new Deferred() }; this.deferred = request.deferred; this.s.once('readable', () => { this.readDeferred(request); }); return request.deferred.promise; } /** * Process deferred read request * @param request Deferred read request */ readDeferred(request) { const readBuffer = this.s.read(request.buffer.length); if (readBuffer) { request.buffer.set(readBuffer); request.deferred.resolve(readBuffer.length); this.deferred = null; } else { this.s.once('readable', () => { this.readDeferred(request); }); } } reject(err) { this.interrupted = true; if (this.deferred) { this.deferred.reject(err); this.deferred = null; } } async abort() { this.reject(new AbortError()); } async close() { return this.abort(); } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MCPJam/mcp-spec'

If you have feedback or need assistance with the MCP directory API, please join our Discord server