Skip to main content
Glama

cowsay

Generate ASCII art with a cow or character displaying your custom message. Choose from various animals like dragons, penguins, and skeletons to create fun text-based illustrations.

Instructions

Generate ASCII art of a cow saying something.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cowNoThe cow character to use.default
messageYesThe message for the cow to say.Hello World!

Implementation Reference

  • The handler function that executes the cowsay tool logic: validates access, lowercases inputs if configured, calls generateCowsay helper, and returns the ASCII art as text content.
    }, async ({ message, character }) => { // Validate server access if (!validateServerAccess(config.serverToken)) { throw new Error("Server access validation failed. Please provide a valid serverToken."); } // Apply user preferences from config const searchText = config.caseSensitive ? message : message.toLowerCase(); const searchChar = config.caseSensitive ? character : character.toLowerCase(); // Count occurrences of the specific character const result = await generateCowsay(searchText, searchChar); return { content: [ { type: "text", text: result } ], }; })
  • Core helper function implementing cowsay logic: prefers executing 'npx cowsay' via child_process, falls back to 'cowsay' library's say() method.
    export async function generateCowsay(message: string, cow: string): Promise<string> { try { const cowOption = cow !== 'default' ? `-f ${cow}` : ''; const escapedMessage = message.replace(/'/g, "\\'"); const { stdout } = await execAsync(`echo '${escapedMessage}' | npx cowsay@1.6.0 ${cowOption}`); return stdout; } catch (error) { try { const options = cow !== 'default' ? { f: cow } : {}; return cowsay.say({ text: message, ...options }); } catch (err) { throw new Error(`Failed to generate cowsay output: ${err instanceof Error ? err.message : String(err)}`); } } }
  • Detailed JSON schema definition for the cowsay tool inputs, including message, character selection, custom eyes/tongue, and various cow face modes.
    export const COWSAY: Tool = { name: 'cowsay', title: 'Cow Say', description: 'Generate ASCII art of a cow saying something.', inputSchema: { type: 'object', properties: { message: { type: 'string', description: 'The message for the cow to say.', default: 'Hello World!' }, character: { type: 'string', description: 'The cow character to use.', enum: ['default', 'small', 'tux', 'moose', 'sheep', 'dragon', 'elephant', 'skeleton', 'stimpy'], default: 'default' }, e: { type: 'string', description: 'Custom eyes for the cow.', default: 'oo' }, T: { type: 'string', description: 'Custom tongue for the cow.' }, r: { type: 'boolean', description: 'Use a random cow character.', default: false }, b: { type: 'boolean', description: 'Borg mode - use borg face.', default: false }, d: { type: 'boolean', description: 'Dead mode - use dead face.', default: false }, g: { type: 'boolean', description: 'Greedy mode - use greedy face.', default: false }, p: { type: 'boolean', description: 'Paranoia mode - use paranoia face.', default: false }, s: { type: 'boolean', description: 'Stoned mode - use stoned face.', default: false }, t: { type: 'boolean', description: 'Tired mode - use tired face.', default: false }, w: { type: 'boolean', description: 'Wired mode - use wired face.', default: false }, y: { type: 'boolean', description: 'Youthful mode - use youthful face.', default: false } }, required: ['message'] }, };
  • src/index.ts:52-58 (registration)
    Registers the 'cowsay' tool with the MCP server, referencing title/description from tools.ts and providing a Zod-based input schema (simplified to message and character).
    mcp_server.registerTool("cowsay", { title: COWSAY.title, description: COWSAY.description, inputSchema: { message: z.string().describe('The message for the cow to say.'), character: z.string().optional().default('default').describe('The cow character to use.') },
Install Server

Other Tools

Latest Blog Posts

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/mrseanchow/cowsay-mcp'

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