get_chat_member_info
Retrieve role and user information for a specific chat member by providing chat and user IDs. Use this to check permissions or profile details.
Instructions
Return role and user info for a chat member.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ||
| user_id | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | Yes | ||
| error | No | ||
| chat_id | No | ||
| user_id | No | ||
| status | No | ||
| username | No | ||
| first_name | No | ||
| last_name | No | ||
| language_code | No | ||
| is_bot | No |
Implementation Reference
- aiogram_mcp/tools/users.py:66-109 (handler)The actual handler function for the get_chat_member_info tool. It checks if the chat is allowed, calls bot.get_chat_member(), and returns a ChatMemberInfoResult with the member's status and user info.
@mcp.tool async def get_chat_member_info(chat_id: int, user_id: int) -> ChatMemberInfoResult: """Return role and user info for a chat member.""" if not ctx.is_chat_allowed(chat_id): result = ChatMemberInfoResult( ok=False, error=f"Chat {chat_id} is not allowed." ) if ctx.audit_logger: ctx.audit_logger.log( "get_chat_member_info", {"chat_id": chat_id, "user_id": user_id}, result.ok, result.error, ) return result try: if ctx.rate_limiter: await ctx.rate_limiter.acquire() member = await ctx.bot.get_chat_member(chat_id=chat_id, user_id=user_id) user = member.user status = member.status.value if hasattr(member.status, "value") else str(member.status) result = ChatMemberInfoResult( ok=True, chat_id=chat_id, user_id=user.id, status=status, username=user.username, first_name=user.first_name, last_name=user.last_name, language_code=user.language_code, is_bot=user.is_bot, ) except (TelegramBadRequest, TelegramForbiddenError) as exc: result = ChatMemberInfoResult(ok=False, error=str(exc)) if ctx.audit_logger: ctx.audit_logger.log( "get_chat_member_info", {"chat_id": chat_id, "user_id": user_id}, result.ok, result.error, ) return result - aiogram_mcp/tools/users.py:24-32 (schema)ChatMemberInfoResult Pydantic model defines the output schema for get_chat_member_info, including chat_id, user_id, status, username, first_name, last_name, language_code, is_bot fields.
class ChatMemberInfoResult(ToolResponse): chat_id: int | None = None user_id: int | None = None status: str | None = None username: str | None = None first_name: str | None = None last_name: str | None = None language_code: str | None = None is_bot: bool | None = None - aiogram_mcp/tools/users.py:64-109 (registration)Registration via @mcp.tool decorator inside register_user_tools(), gated by allowed_tools check for 'get_chat_member_info'. Called from server.py line 89.
if allowed_tools is None or "get_chat_member_info" in allowed_tools: @mcp.tool async def get_chat_member_info(chat_id: int, user_id: int) -> ChatMemberInfoResult: """Return role and user info for a chat member.""" if not ctx.is_chat_allowed(chat_id): result = ChatMemberInfoResult( ok=False, error=f"Chat {chat_id} is not allowed." ) if ctx.audit_logger: ctx.audit_logger.log( "get_chat_member_info", {"chat_id": chat_id, "user_id": user_id}, result.ok, result.error, ) return result try: if ctx.rate_limiter: await ctx.rate_limiter.acquire() member = await ctx.bot.get_chat_member(chat_id=chat_id, user_id=user_id) user = member.user status = member.status.value if hasattr(member.status, "value") else str(member.status) result = ChatMemberInfoResult( ok=True, chat_id=chat_id, user_id=user.id, status=status, username=user.username, first_name=user.first_name, last_name=user.last_name, language_code=user.language_code, is_bot=user.is_bot, ) except (TelegramBadRequest, TelegramForbiddenError) as exc: result = ChatMemberInfoResult(ok=False, error=str(exc)) if ctx.audit_logger: ctx.audit_logger.log( "get_chat_member_info", {"chat_id": chat_id, "user_id": user_id}, result.ok, result.error, ) return result - aiogram_mcp/server.py:89-89 (registration)Server calls register_user_tools() to register all user tools including get_chat_member_info.
register_user_tools(self._mcp, self._ctx, allowed_tools=at) - aiogram_mcp/permissions.py:21-21 (helper)Permission mapping: get_chat_member_info is assigned PermissionLevel.READ, meaning it's available at the lowest permission tier.
"get_chat_member_info": PermissionLevel.READ,