Skip to main content
Glama
mrseanchow

Cowsay MCP Server

by mrseanchow

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