@iqai/mcp-near-agent
Version:
Mcp server for Near
115 lines (114 loc) • 3.71 kB
TypeScript
import { EventEmitter } from "node:events";
import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
import type { Account } from "near-api-js";
import type { AgentEvent } from "../types.js";
import type { EventSubscription } from "./subscription-manager.js";
export interface ProcessingResult {
success: boolean;
response?: string;
error?: string;
requestId: string;
subscription: EventSubscription;
event: AgentEvent;
processingTime: number;
}
export interface EventContext {
subscription: EventSubscription;
event: AgentEvent;
account: Account;
}
export interface EventProcessorEvents {
"event:processed": [result: ProcessingResult];
"event:processing-error": [result: ProcessingResult];
"event:mcp-request": [context: EventContext];
"event:mcp-response": [context: EventContext, response: any];
"event:blockchain-response": [context: EventContext, txHash: string];
"queue:added": [requestId: string, context: EventContext];
"queue:removed": [requestId: string];
"stats:updated": [stats: ProcessingStats];
}
export interface ProcessingStats {
totalProcessed: number;
successful: number;
failed: number;
averageProcessingTime: number;
successRate: number;
currentQueueSize: number;
}
export declare class EventProcessor extends EventEmitter<EventProcessorEvents> {
private static readonly DEFAULT_MAX_TOKENS;
private static readonly DEFAULT_TIMEOUT;
private account;
private server;
private processingQueue;
private processingStats;
constructor(account?: Account, server?: Server);
/**
* Set the NEAR account for blockchain interactions
*/
setAccount(account: Account): void;
/**
* Set the MCP server for creating messages
*/
setServer(server: Server): void;
/**
* Process an event by requesting sampling from MCP client and sending response to blockchain
*/
processEvent(context: EventContext): Promise<ProcessingResult>;
/**
* Request sampling from MCP client using server.createMessage
*/
private requestMCPSampling;
/**
* Format event data for MCP sampling
*/
private formatEventForSampling;
/**
* Send response back to the NEAR blockchain
*/
private sendBlockchainResponse;
/**
* Update processing statistics
*/
private updateStats;
/**
* Get current processing queue status
*/
getQueueStatus(): {
queueSize: number;
processingItems: {
requestId: string;
eventType: string;
contractId: string;
timestamp: number;
}[];
};
/**
* Get processing statistics
*/
getStats(): ProcessingStats;
/**
* Check if a request is currently being processed
*/
isProcessing(requestId: string): boolean;
/**
* Get all currently processing request IDs
*/
getProcessingRequestIds(): string[];
/**
* Cancel processing for a specific request (if still in queue)
*/
cancelProcessing(requestId: string): boolean;
/**
* Reset statistics
*/
resetStats(): void;
/**
* Cleanup resources
*/
cleanup(): void;
on<K extends keyof EventProcessorEvents>(event: K, listener: (...args: EventProcessorEvents[K]) => void): this;
emit<K extends keyof EventProcessorEvents>(event: K, ...args: EventProcessorEvents[K]): boolean;
off<K extends keyof EventProcessorEvents>(event: K, listener: (...args: EventProcessorEvents[K]) => void): this;
once<K extends keyof EventProcessorEvents>(event: K, listener: (...args: EventProcessorEvents[K]) => void): this;
}