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."

Tool Definition Quality

Score is being calculated. Check back soon.

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

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