Skip to content

Profiles

Source code in superme_sdk/services/_profiles.py
class ProfilesMixin:
    def get_profile(self, identifier: Optional[str] = None) -> dict:
        """Return public profile info for a user.

        Example:
            ```python
            me = client.get_profile()
            profile = client.get_profile("ludo")
            print(profile["name"], profile["user_id"])
            ```

        Args:
            identifier: User ID, username, or full name. Omit for your own profile.

        Returns:
            When called without ``identifier`` (own profile): dict with ``name``,
            ``title``, ``location``, ``avatar_image``, ``connected_accounts``,
            ``connected_blogs``.
            When called with ``identifier``: flat profile dict with ``user_id``,
            ``in_network``, ``name``, and other public fields.
            Returns ``{}`` if no match is found.
        """
        if not identifier:
            return self._mcp_tool_call("get_my_profile", {})
        result = self._mcp_tool_call("find_profiles", {"identifier": identifier})
        users = result.get("users", []) if isinstance(result, dict) else []
        return users[0] if users else {}

    def find_user_by_name(self, name: str, *, limit: int = 10) -> dict:
        """Search for SuperMe users by name.

        Example:
            ```python
            result = client.find_user_by_name("ludo")
            for u in result["users"]:
                print(u["user_id"], u["name"])
            ```

        Args:
            name: Full or partial name to search for.
            limit: Maximum results to return.

        Returns:
            Dict with ``users`` (list of matches) and ``workgroups`` keys.
        """
        return self._mcp_tool_call(
            "find_profiles", {"identifier": name, "limit": limit}
        )

    def find_users_by_names(
        self, names: list[str], *, limit_per_name: int = 10
    ) -> dict:
        """Resolve multiple names to SuperMe users in a single call.

        Example:
            ```python
            result = client.find_users_by_names(["ludo", "duy"])
            ids = result["resolved_user_ids"]
            ```

        Args:
            names: List of names to look up.
            limit_per_name: Maximum matches per name.

        Returns:
            Dict with ``results``, ``resolved_user_ids``, and ``unresolved`` keys.
        """
        return self._mcp_tool_call(
            "find_profiles",
            {"identifier": names, "limit": limit_per_name},
        )

    def find_users_on_topic(
        self,
        question: str,
        *,
        max_results: int = 10,
        excluded_user_ids: list[str] | None = None,
    ) -> dict:
        """Find SuperMe users who are experts on a topic.

        Example:
            ```python
            result = client.find_users_on_topic("product-led growth")
            for expert in result["experts"]:
                print(expert["user_name"], expert["why_selected"])
            ```

        Args:
            question: A topic or question to find experts on.
            max_results: Maximum number of experts to return (1-20, default 10).
            excluded_user_ids: User IDs to exclude from results.

        Returns:
            Dict with ``question`` and ``experts`` list, each having ``user_id``,
            ``user_name``, ``why_selected``, and ``relevance_score``.
        """
        args: dict[str, Any] = {"question": question, "max_results": max_results}
        if excluded_user_ids is not None:
            args["excluded_user_ids"] = excluded_user_ids
        return self._mcp_tool_call("find_experts", args)

    def perspective_search(self, question: str) -> dict:
        """Get perspectives from multiple experts on a topic.

        Example:
            ```python
            result = client.perspective_search("What is product-market fit?")
            print(result["synthesis"])
            for p in result["perspectives"]:
                print(p["expert_name"], p["perspective"])
            ```

        Args:
            question: A topic or question to get expert takes on.

        Returns:
            Dict with ``perspectives`` list and ``synthesis`` string.
        """
        return self._mcp_tool_call("search_perspective", {"question": question})

get_profile

get_profile(identifier: Optional[str] = None) -> dict

Return public profile info for a user.

Example
me = client.get_profile()
profile = client.get_profile("ludo")
print(profile["name"], profile["user_id"])

Parameters:

Name Type Description Default
identifier Optional[str]

User ID, username, or full name. Omit for your own profile.

None

Returns:

Type Description
dict

When called without identifier (own profile): dict with name,

dict

title, location, avatar_image, connected_accounts,

dict

connected_blogs.

dict

When called with identifier: flat profile dict with user_id,

dict

in_network, name, and other public fields.

dict

Returns {} if no match is found.

Source code in superme_sdk/services/_profiles.py
def get_profile(self, identifier: Optional[str] = None) -> dict:
    """Return public profile info for a user.

    Example:
        ```python
        me = client.get_profile()
        profile = client.get_profile("ludo")
        print(profile["name"], profile["user_id"])
        ```

    Args:
        identifier: User ID, username, or full name. Omit for your own profile.

    Returns:
        When called without ``identifier`` (own profile): dict with ``name``,
        ``title``, ``location``, ``avatar_image``, ``connected_accounts``,
        ``connected_blogs``.
        When called with ``identifier``: flat profile dict with ``user_id``,
        ``in_network``, ``name``, and other public fields.
        Returns ``{}`` if no match is found.
    """
    if not identifier:
        return self._mcp_tool_call("get_my_profile", {})
    result = self._mcp_tool_call("find_profiles", {"identifier": identifier})
    users = result.get("users", []) if isinstance(result, dict) else []
    return users[0] if users else {}

find_user_by_name

find_user_by_name(name: str, *, limit: int = 10) -> dict

Search for SuperMe users by name.

Example
result = client.find_user_by_name("ludo")
for u in result["users"]:
    print(u["user_id"], u["name"])

Parameters:

Name Type Description Default
name str

Full or partial name to search for.

required
limit int

Maximum results to return.

10

Returns:

Type Description
dict

Dict with users (list of matches) and workgroups keys.

Source code in superme_sdk/services/_profiles.py
def find_user_by_name(self, name: str, *, limit: int = 10) -> dict:
    """Search for SuperMe users by name.

    Example:
        ```python
        result = client.find_user_by_name("ludo")
        for u in result["users"]:
            print(u["user_id"], u["name"])
        ```

    Args:
        name: Full or partial name to search for.
        limit: Maximum results to return.

    Returns:
        Dict with ``users`` (list of matches) and ``workgroups`` keys.
    """
    return self._mcp_tool_call(
        "find_profiles", {"identifier": name, "limit": limit}
    )

find_users_by_names

find_users_by_names(
    names: list[str], *, limit_per_name: int = 10
) -> dict

Resolve multiple names to SuperMe users in a single call.

Example
result = client.find_users_by_names(["ludo", "duy"])
ids = result["resolved_user_ids"]

Parameters:

Name Type Description Default
names list[str]

List of names to look up.

required
limit_per_name int

Maximum matches per name.

10

Returns:

Type Description
dict

Dict with results, resolved_user_ids, and unresolved keys.

Source code in superme_sdk/services/_profiles.py
def find_users_by_names(
    self, names: list[str], *, limit_per_name: int = 10
) -> dict:
    """Resolve multiple names to SuperMe users in a single call.

    Example:
        ```python
        result = client.find_users_by_names(["ludo", "duy"])
        ids = result["resolved_user_ids"]
        ```

    Args:
        names: List of names to look up.
        limit_per_name: Maximum matches per name.

    Returns:
        Dict with ``results``, ``resolved_user_ids``, and ``unresolved`` keys.
    """
    return self._mcp_tool_call(
        "find_profiles",
        {"identifier": names, "limit": limit_per_name},
    )

find_users_on_topic

find_users_on_topic(
    question: str,
    *,
    max_results: int = 10,
    excluded_user_ids: list[str] | None = None,
) -> dict

Find SuperMe users who are experts on a topic.

Example
result = client.find_users_on_topic("product-led growth")
for expert in result["experts"]:
    print(expert["user_name"], expert["why_selected"])

Parameters:

Name Type Description Default
question str

A topic or question to find experts on.

required
max_results int

Maximum number of experts to return (1-20, default 10).

10
excluded_user_ids list[str] | None

User IDs to exclude from results.

None

Returns:

Type Description
dict

Dict with question and experts list, each having user_id,

dict

user_name, why_selected, and relevance_score.

Source code in superme_sdk/services/_profiles.py
def find_users_on_topic(
    self,
    question: str,
    *,
    max_results: int = 10,
    excluded_user_ids: list[str] | None = None,
) -> dict:
    """Find SuperMe users who are experts on a topic.

    Example:
        ```python
        result = client.find_users_on_topic("product-led growth")
        for expert in result["experts"]:
            print(expert["user_name"], expert["why_selected"])
        ```

    Args:
        question: A topic or question to find experts on.
        max_results: Maximum number of experts to return (1-20, default 10).
        excluded_user_ids: User IDs to exclude from results.

    Returns:
        Dict with ``question`` and ``experts`` list, each having ``user_id``,
        ``user_name``, ``why_selected``, and ``relevance_score``.
    """
    args: dict[str, Any] = {"question": question, "max_results": max_results}
    if excluded_user_ids is not None:
        args["excluded_user_ids"] = excluded_user_ids
    return self._mcp_tool_call("find_experts", args)
perspective_search(question: str) -> dict

Get perspectives from multiple experts on a topic.

Example
result = client.perspective_search("What is product-market fit?")
print(result["synthesis"])
for p in result["perspectives"]:
    print(p["expert_name"], p["perspective"])

Parameters:

Name Type Description Default
question str

A topic or question to get expert takes on.

required

Returns:

Type Description
dict

Dict with perspectives list and synthesis string.

Source code in superme_sdk/services/_profiles.py
def perspective_search(self, question: str) -> dict:
    """Get perspectives from multiple experts on a topic.

    Example:
        ```python
        result = client.perspective_search("What is product-market fit?")
        print(result["synthesis"])
        for p in result["perspectives"]:
            print(p["expert_name"], p["perspective"])
        ```

    Args:
        question: A topic or question to get expert takes on.

    Returns:
        Dict with ``perspectives`` list and ``synthesis`` string.
    """
    return self._mcp_tool_call("search_perspective", {"question": question})