Skip to main content
Glama
zzaebok

Wikidata MCP Server

by zzaebok

search_entity

Find Wikidata entity IDs by entering search queries to retrieve structured data identifiers for entities like people, places, and concepts.

Instructions

Search for a Wikidata entity ID by its query.

Args:
    query (str): The query to search for. The query should be unambiguous enough to uniquely identify the entity.

Returns:
    str: The Wikidata entity ID corresponding to the given query."

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes

Implementation Reference

  • The handler function for the 'search_entity' tool, decorated with @server.tool() for registration. It invokes the helper function search_wikidata to perform the Wikidata entity search.
    @server.tool()
    async def search_entity(query: str) -> str:
        """
        Search for a Wikidata entity ID by its query.
    
        Args:
            query (str): The query to search for. The query should be unambiguous enough to uniquely identify the entity.
    
        Returns:
            str: The Wikidata entity ID corresponding to the given query."
        """
        return await search_wikidata(query, is_entity=True)
  • Helper function that executes the HTTP request to Wikidata's search API to find entity or property IDs based on the query.
    async def search_wikidata(query: str, is_entity: bool = True) -> str:
        """
        Search for a Wikidata item or property ID by its query.
        """
        params = {
            "action": "query",
            "list": "search",
            "srsearch": query,
            "srnamespace": 0 if is_entity else 120,
            "srlimit": 1,  # TODO: add a parameter to limit the number of results?
            "srqiprofile": "classic_noboostlinks" if is_entity else "classic",
            "srwhat": "text",
            "format": "json",
        }
        async with httpx.AsyncClient() as client:
            response = await client.get(WIKIDATA_URL, headers=HEADER, params=params)
        response.raise_for_status()
        try:
            title = response.json()["query"]["search"][0]["title"]
            title = title.split(":")[-1]
            return title
        except KeyError:
            return "No results found. Consider changing the search term."

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/zzaebok/mcp-wikidata'

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