Skip to main content
Glama
martinfrasch

ResearchTwin

list_researchers

Browse registered researchers on the ResearchTwin platform to access their profiles, publications, datasets, and repositories for comprehensive academic exploration.

Instructions

List all researchers registered on the ResearchTwin platform.

Returns researcher slugs and display names. Use a slug with other tools to explore a specific researcher's profile, papers, datasets, and repositories.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The MCP tool handler that executes the list_researchers logic. Calls backend API via _get('/api/researchers'), formats and returns researcher data with slugs and display names.
    @mcp.tool(annotations=ToolAnnotations(title="List Researchers", read_only_hint=True))
    async def list_researchers() -> str:
        """List all researchers registered on the ResearchTwin platform.
    
        Returns researcher slugs and display names. Use a slug with other
        tools to explore a specific researcher's profile, papers, datasets,
        and repositories.
        """
        data = await _get("/api/researchers")
        researchers = data.get("researchers", [])
        if not researchers:
            return "No researchers registered yet."
        lines = [f"- **{r['display_name']}** (slug: `{r['slug']}`)" for r in researchers]
        return f"**{len(researchers)} researchers:**\n" + "\n".join(lines)
  • Helper function _get() that makes async HTTP requests to the ResearchTwin backend API. Used by list_researchers to fetch researcher data.
    async def _get(path: str, params: dict | None = None) -> dict:
        """Make a GET request to the ResearchTwin API."""
        async with httpx.AsyncClient(timeout=TIMEOUT) as client:
            resp = await client.get(f"{BASE_URL}{path}", params=params)
            resp.raise_for_status()
            return resp.json()
  • Backend FastAPI endpoint /api/researchers that provides the data source. Queries researcher slugs and returns list with slug and display_name for each researcher.
    @app.get("/api/researchers")
    def list_researchers():
        """Return available researchers with display names."""
        result = []
        for slug in researchers.list_slugs():
            r = researchers.get_researcher(slug)
            result.append({"slug": slug, "display_name": r["display_name"]})
        return {"researchers": result}
  • Pydantic response model defining the structure of researcher data with slug, display_name, tier, and message fields.
    class RegisterResponse(BaseModel):
        slug: str
        display_name: str
        tier: int
        message: str

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/martinfrasch/researchtwin'

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