@mondaydotcomorg/agent-toolkit
Version:
monday.com agent toolkit
197 lines (189 loc) • 5.51 kB
TypeScript
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { ApiClientConfig } from '@mondaydotcomorg/api';
import { ZodRawShape, z, ZodTypeAny } from 'zod';
import { ToolAnnotations } from '@modelcontextprotocol/sdk/types';
declare enum ToolMode {
API = "api",
APPS = "apps"
}
type ToolsConfiguration = {
include?: string[];
exclude?: string[];
readOnlyMode?: boolean;
mode?: ToolMode;
enableDynamicApiTools?: boolean | 'only';
enableToolManager?: boolean;
};
type MondayAgentToolkitConfig = {
mondayApiToken: ApiClientConfig['token'];
mondayApiVersion?: ApiClientConfig['apiVersion'];
mondayApiRequestConfig?: ApiClientConfig['requestConfig'];
toolsConfiguration?: ToolsConfiguration;
};
/**
* Monday Agent Toolkit providing an MCP server with Monday.com tools
*/
declare class MondayAgentToolkit extends McpServer {
private readonly mondayApiClient;
private readonly mondayApiToken;
private readonly dynamicToolManager;
/**
* Creates a new instance of the Monday Agent Toolkit
* @param config Configuration for the toolkit
*/
constructor(config: MondayAgentToolkitConfig);
/**
* Create and configure the Monday API client
*/
private createApiClient;
/**
* Register all tools with the MCP server
*/
private registerTools;
/**
* Register the management tool with toolkit reference
*/
private registerManagementTool;
/**
* Initialize both API and CLI tools
*/
private initializeTools;
/**
* Register a single tool with the MCP server
*/
private registerSingleTool;
/**
* Dynamically enable a tool
*/
enableTool(toolName: string): boolean;
/**
* Dynamically disable a tool
*/
disableTool(toolName: string): boolean;
/**
* Check if a tool is enabled
*/
isToolEnabled(toolName: string): boolean;
/**
* Get list of all available tools and their status
*/
getToolsStatus(): Record<string, boolean>;
/**
* Get list of all dynamic tool names
*/
getDynamicToolNames(): string[];
getServer(): McpServer;
/**
* Format the tool result into the expected MCP format
*/
private formatToolResult;
/**
* Handle tool execution errors
*/
private handleToolError;
}
interface Executable<Input, Output> {
execute: (input?: Input) => Promise<Output>;
}
type ToolInputType<Input extends ZodRawShape | undefined> = Input extends ZodRawShape ? z.objectOutputType<Input, ZodTypeAny> : undefined;
type ToolOutputType<T extends Record<string, unknown>> = {
content: string;
metadata?: T;
};
declare enum ToolType {
READ = "read",
WRITE = "write",
ALL_API = "all_api"
}
interface Tool<Input extends ZodRawShape | undefined, Output extends Record<string, unknown> = never> extends Executable<ToolInputType<Input>, ToolOutputType<Output>> {
name: string;
type: ToolType;
annotations: ToolAnnotations;
/** Whether the tool is enabled by default. Defaults to true if not specified. */
enabledByDefault?: boolean;
getDescription(): string;
getInputSchema(): Input;
}
interface ToolkitManager {
enableTool(toolName: string): boolean;
disableTool(toolName: string): boolean;
isToolEnabled(toolName: string): boolean;
isToolEnabledByDefault(toolName: string): boolean;
getToolsStatus(): Record<string, boolean>;
getDetailedToolsStatus(): Record<string, {
enabled: boolean;
enabledByDefault: boolean;
}>;
resetToolToDefault(toolName: string): boolean;
getDynamicToolNames(): string[];
}
/**
* Interface representing an MCP server tool registration handle
*/
interface MCPToolHandle {
enable(): void;
disable(): void;
}
/**
* Interface for dynamic tool control
*/
interface DynamicTool {
instance: Tool<any, any>;
mcpTool: MCPToolHandle;
enabled: boolean;
enabledByDefault: boolean;
}
/**
* Manages dynamic tool registration, enabling, and disabling
*/
declare class DynamicToolManager implements ToolkitManager {
private readonly dynamicTools;
/**
* Register a tool for dynamic management
*/
registerTool(tool: Tool<any, any>, mcpTool: MCPToolHandle): void;
/**
* Enable a specific tool
*/
enableTool(toolName: string): boolean;
/**
* Disable a specific tool
*/
disableTool(toolName: string): boolean;
/**
* Check if a tool is currently enabled
*/
isToolEnabled(toolName: string): boolean;
/**
* Check if a tool is enabled by default
*/
isToolEnabledByDefault(toolName: string): boolean;
/**
* Get list of all available tools and their status
*/
getToolsStatus(): Record<string, boolean>;
/**
* Get list of all dynamic tool names
*/
getDynamicToolNames(): string[];
/**
* Get list of all available tools with their current and default status
*/
getDetailedToolsStatus(): Record<string, {
enabled: boolean;
enabledByDefault: boolean;
}>;
/**
* Reset a tool to its default enabled state
*/
resetToolToDefault(toolName: string): boolean;
/**
* Get all registered dynamic tools (for internal use)
*/
getAllDynamicTools(): Map<string, DynamicTool>;
/**
* Clear all registered tools (for cleanup)
*/
clear(): void;
}
export { DynamicToolManager, MondayAgentToolkit };