Skip to main content
Glama
self-tech-labs

Online Kommentar MCP Server

search_commentaries

Search Swiss legal commentaries by query, language, and legislative act to find relevant legal analysis and interpretation.

Instructions

Searches for legal commentaries based on a query and filters.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
searchYesThe full-text search query.
languageNoContent language.
legislative_actNoFilter by legislative act ID.
sortNoSort order.
pageNoPage number for pagination.

Implementation Reference

  • The asynchronous handler function that executes the 'search_commentaries' tool. It builds query parameters, fetches data from the Online Kommentar API, processes the response, formats the commentaries into text, and handles errors appropriately.
    async (args: { search: string; language?: "en" | "de" | "fr" | "it"; legislative_act?: string; sort?: "title" | "-title" | "date" | "-date"; page?: number; }) => {
      const { search, language, legislative_act, sort, page } = args;
      const queryParams = new URLSearchParams({
          ...(search && { search }),
          ...(language && { language }),
          ...(legislative_act && { legislative_act }),
          ...(sort && { sort }),
          ...(page && { page: page.toString() }),
      });
    
      try {
          const response = await fetch(`${API_BASE_URL}/commentaries?${queryParams.toString()}`, {
              headers: { "Accept": "application/json" }
          });
    
          if (!response.ok) {
              throw new Error(`API request failed with status ${response.status}`);
          }
    
          const data = (await response.json()) as { data: Commentary[] };
          const commentaries = data.data;
          const resultText = commentaries.length > 0
              ? commentaries.map(c => `ID: ${c.id}\nTitle: ${c.title}\nDate: ${c.date}\nURL: ${c.html_link}`).join("\n\n")
              : "No commentaries found for the given criteria.";
    
          return {
              content: [{ type: "text", text: resultText }],
          };
      } catch (error) {
          const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
          return {
              content: [{ type: "text", text: `Error searching commentaries: ${errorMessage}` }],
              isError: true,
          };
      }
    }
  • Zod-based input schema defining parameters for the 'search_commentaries' tool: search query, optional filters for language, legislative act, sort order, and pagination.
    inputSchema: {
      search: z.string().describe("The full-text search query."),
      language: z.enum(["en", "de", "fr", "it"]).optional().describe("Content language."),
      legislative_act: z.string().optional().describe("Filter by legislative act ID."),
      sort: z.enum(["title", "-title", "date", "-date"]).optional().describe("Sort order."),
      page: z.number().optional().describe("Page number for pagination."),
    },
  • src/index.ts:39-88 (registration)
    Registration of the 'search_commentaries' tool on the MCP server, including name, metadata, input schema, and handler reference.
    server.registerTool(
      "search_commentaries",
      {
        title: "Search Commentaries",
        description: "Searches for legal commentaries based on a query and filters.",
        inputSchema: {
          search: z.string().describe("The full-text search query."),
          language: z.enum(["en", "de", "fr", "it"]).optional().describe("Content language."),
          legislative_act: z.string().optional().describe("Filter by legislative act ID."),
          sort: z.enum(["title", "-title", "date", "-date"]).optional().describe("Sort order."),
          page: z.number().optional().describe("Page number for pagination."),
        },
      },
      async (args: { search: string; language?: "en" | "de" | "fr" | "it"; legislative_act?: string; sort?: "title" | "-title" | "date" | "-date"; page?: number; }) => {
        const { search, language, legislative_act, sort, page } = args;
        const queryParams = new URLSearchParams({
            ...(search && { search }),
            ...(language && { language }),
            ...(legislative_act && { legislative_act }),
            ...(sort && { sort }),
            ...(page && { page: page.toString() }),
        });
    
        try {
            const response = await fetch(`${API_BASE_URL}/commentaries?${queryParams.toString()}`, {
                headers: { "Accept": "application/json" }
            });
    
            if (!response.ok) {
                throw new Error(`API request failed with status ${response.status}`);
            }
    
            const data = (await response.json()) as { data: Commentary[] };
            const commentaries = data.data;
            const resultText = commentaries.length > 0
                ? commentaries.map(c => `ID: ${c.id}\nTitle: ${c.title}\nDate: ${c.date}\nURL: ${c.html_link}`).join("\n\n")
                : "No commentaries found for the given criteria.";
    
            return {
                content: [{ type: "text", text: resultText }],
            };
        } catch (error) {
            const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
            return {
                content: [{ type: "text", text: `Error searching commentaries: ${errorMessage}` }],
                isError: true,
            };
        }
      }
    );
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/self-tech-labs/onlinekommentar-mcp'

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