Skip to main content
Glama

get_student_progress

Retrieve the progress of a student in their classes by providing the user ID and the subdomain of the members area.

Instructions

Get Student Progress

Retorna o progresso de um aluno nas aulas.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
user_idYesID do aluno
subdomainYesSubdomínio da área de membros
selectNoSeleção de campos customizados na resposta

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • The tool handler that makes a GET request to /club/api/v1/users/{user_id}/lessons to retrieve a student's lesson progress and returns the result as JSON.
    async def get_student_progress(
        user_id: str,
        subdomain: str,
        select: Optional[str] = None,
    ) -> str:
        """Get Student Progress
        
        Retorna o progresso de um aluno nas aulas.
        
        Args:
            user_id: ID do aluno
            subdomain: Subdomínio da área de membros
            select: Seleção de campos customizados na resposta"""
        endpoint = f"/club/api/v1/users/{user_id}/lessons"
        params = {}
        if subdomain is not None:
            params["subdomain"] = subdomain
        if select is not None:
            params["select"] = select
        result = await get_client().get(endpoint, params=params)
        return json.dumps(result, indent=2)
  • Export list that includes get_student_progress, acting as a lightweight schema/registry for the tool.
    __all__ = ["get_modules", "get_module_pages", "get_students", "get_student_progress"]
  • Auto-discovery registration: iterates all modules in tools package, finds coroutine functions (including get_student_progress), and registers them with FastMCP via mcp.tool()(obj).
    def _discover_and_register_tools() -> int:
        """Import all modules under hotmart_mcp.tools and register async functions."""
        registered = 0
    
        for module_info in pkgutil.iter_modules(tools_pkg.__path__, prefix=f"{tools_pkg.__name__}."):
            if module_info.name.endswith("__init__"):
                continue
    
            module = importlib.import_module(module_info.name)
    
            for name, obj in inspect.getmembers(module, iscoroutinefunction):
                if name.startswith("_"):
                    continue
                mcp.tool()(obj)
                registered += 1
    
        return registered
  • Re-exports get_student_progress from club module into the tools package namespace.
    from .club import *  # noqa: F401,F403
    from .coupons import *  # noqa: F401,F403
    from .negotiation import *  # noqa: F401,F403
    from .products import *  # noqa: F401,F403
    from .sales import *  # noqa: F401,F403
    from .subscriptions import *  # noqa: F401,F403
    from .tickets import *  # noqa: F401,F403
  • Helper that provides the shared HotmartClient singleton used by get_student_progress to make API calls.
    def get_client() -> HotmartClient:
        global _client
        if _client is None:
            _client = HotmartClient()
        return _client
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must carry the full burden of behavioral disclosure. It only states a read operation (returning progress) but fails to mention any traits such as required permissions, rate limits, or whether the operation is safe and idempotent. The output schema exists but the description adds no behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (two sentences) but includes redundancy: the title 'Get Student Progress' is repeated verbatim in the description body. While compact, this repetition wastes a sentence and could be streamlined. Adequately sized but not optimally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, an output schema, and a complex domain (student progress in classes), the description is too brief. It fails to explain what 'progress' entails, how the output is structured, or any necessary context like authentication or scoping. The presence of an output schema partially mitigates this, but the description does not reference it or guide the agent on interpreting results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so parameters are already documented. The description adds minimal meaning by linking 'student progress' to the user_id parameter, but it does not elaborate on the 'select' parameter or provide additional context beyond what the schema offers. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves student progress in classes ('Retorna o progresso de um aluno nas aulas'), distinguishing it from sibling tools like get_students or get_modules. However, it lacks specifics on the exact scope of progress (e.g., per course or overall), preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when or when not to use this tool versus alternatives like get_students or get_modules. There is no mention of prerequisites, limitations, or context where the tool is appropriate, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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/thaleslaray/hotmart-mcp'

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