Skip to main content
Glama

chat

Chat with LibreModel (Gigi) through Claude Desktop to interact with local LLM instances using configurable sampling parameters for conversation control.

Instructions

Have a conversation with LibreModel (Gigi)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
messageYesYour message to LibreModel
temperatureNoSampling temperature (0.0-2.0)
max_tokensNoMaximum tokens to generate
top_pNoNucleus sampling parameter
top_kNoTop-k sampling parameter
system_promptNoOptional system prompt to prefix the conversation

Implementation Reference

  • Handler function for the 'chat' tool that invokes callLlamaServer with user parameters and formats the response as MCP content.
    }, async (args) => {
      try {
        const response = await this.callLlamaServer({
          message: args.message,
          temperature: args.temperature || this.config.defaultTemperature,
          max_tokens: args.max_tokens || this.config.defaultMaxTokens,
          top_p: args.top_p || this.config.defaultTopP,
          top_k: args.top_k || this.config.defaultTopK,
          system_prompt: args.system_prompt || ""
        });
    
        return {
          content: [
            {
              type: "text",
              text: `**LibreModel (Gigi) responds:**\n\n${response.content}\n\n---\n*Tokens: ${response.tokens_predicted} | Model: ${response.model || "LibreModel"}*`
            }
          ]
        };
      } catch (error) {
        return {
          content: [
            {
              type: "text", 
              text: `**Error communicating with LibreModel:**\n${error instanceof Error ? error.message : String(error)}`
            }
          ],
          isError: true
        };
      }
    });
  • Zod input schema defining parameters for the 'chat' tool.
    inputSchema: {
      message: z.string().describe("Your message to LibreModel"),
      temperature: z.number().min(0.0).max(2.0).default(this.config.defaultTemperature).describe("Sampling temperature (0.0-2.0)"),
      max_tokens: z.number().min(1).max(2048).default(this.config.defaultMaxTokens).describe("Maximum tokens to generate"),
      top_p: z.number().min(0.0).max(1.0).default(this.config.defaultTopP).describe("Nucleus sampling parameter"),
      top_k: z.number().min(1).default(this.config.defaultTopK).describe("Top-k sampling parameter"),
      system_prompt: z.string().default("").describe("Optional system prompt to prefix the conversation")
    }
  • src/index.ts:68-109 (registration)
    Registration of the 'chat' tool on the MCP server, including title, description, schema, and handler.
    this.server.registerTool("chat", {
      title: "Chat with LibreModel",
      description: "Have a conversation with LibreModel (Gigi)",
      inputSchema: {
        message: z.string().describe("Your message to LibreModel"),
        temperature: z.number().min(0.0).max(2.0).default(this.config.defaultTemperature).describe("Sampling temperature (0.0-2.0)"),
        max_tokens: z.number().min(1).max(2048).default(this.config.defaultMaxTokens).describe("Maximum tokens to generate"),
        top_p: z.number().min(0.0).max(1.0).default(this.config.defaultTopP).describe("Nucleus sampling parameter"),
        top_k: z.number().min(1).default(this.config.defaultTopK).describe("Top-k sampling parameter"),
        system_prompt: z.string().default("").describe("Optional system prompt to prefix the conversation")
      }
    }, async (args) => {
      try {
        const response = await this.callLlamaServer({
          message: args.message,
          temperature: args.temperature || this.config.defaultTemperature,
          max_tokens: args.max_tokens || this.config.defaultMaxTokens,
          top_p: args.top_p || this.config.defaultTopP,
          top_k: args.top_k || this.config.defaultTopK,
          system_prompt: args.system_prompt || ""
        });
    
        return {
          content: [
            {
              type: "text",
              text: `**LibreModel (Gigi) responds:**\n\n${response.content}\n\n---\n*Tokens: ${response.tokens_predicted} | Model: ${response.model || "LibreModel"}*`
            }
          ]
        };
      } catch (error) {
        return {
          content: [
            {
              type: "text", 
              text: `**Error communicating with LibreModel:**\n${error instanceof Error ? error.message : String(error)}`
            }
          ],
          isError: true
        };
      }
    });
  • Helper method that constructs the prompt and makes the HTTP POST request to the llama-server /completion endpoint, used by the chat handler.
    private async callLlamaServer(params: {
      message: string;
      temperature: number;
      max_tokens: number;
      top_p: number;
      top_k: number;
      system_prompt: string;
    }): Promise<LlamaCompletionResponse> {
      const prompt = params.system_prompt 
        ? `${params.system_prompt}\n\nHuman: ${params.message}\n\nAssistant:`
        : `Human: ${params.message}\n\nAssistant:`;
    
      const requestBody: LlamaCompletionRequest = {
        prompt,
        temperature: params.temperature,
        n_predict: params.max_tokens,
        top_p: params.top_p,
        top_k: params.top_k,
        stop: this.config.stopSequences,
        stream: false
      };
    
      const response = await fetch(`${this.config.url}/completion`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify(requestBody)
      });
    
      if (!response.ok) {
        throw new Error(`HTTP ${response.status}: ${response.statusText}`);
      }
    
      const data = await response.json() as LlamaCompletionResponse;
      
      if (!data.content) {
        throw new Error("No content in response from llama-server");
      }
    
      return data;
    }
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/openconstruct/llama-mcp-server'

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