Skip to main content
Glama
self-tech-labs

Online Kommentar MCP Server

search_commentaries

Search and filter Swiss legal commentaries by query, language, legislative act, and sorting criteria to retrieve precise legal insights in multiple languages.

Instructions

Searches for legal commentaries based on a query and filters.

Input Schema

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

Implementation Reference

  • Handler function that performs the search for commentaries by querying the Online Kommentar API with the provided parameters, processes the response, and returns formatted results or error.
    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, }; } }
  • Input schema using Zod for validating tool arguments: required 'search' string, optional filters for language, legislative_act, sort, and page.
    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)
    Full registration of the 'search_commentaries' tool on the MCP server, including title, description, input schema, and inline handler function.
    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, }; } } );

Other Tools

Related 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