Skip to main content
Glama

send_invite

Send signing invitations for documents or document groups to recipients with defined roles and actions.

Instructions

Send invite to sign a document or document group. This tool is ONLY for documents and document groups. If you have template or template_group, use the alternative tool: send_invite_from_template

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
entity_idYesID of the document or document group
ordersNoList of orders with recipients (can be a list or JSON string)
entity_typeNoType of entity: 'document' or 'document_group' (optional). If you're passing it, make sure you know what type you have. If it's not found, try using a different type.

Implementation Reference

  • The primary handler function for the 'send_invite' MCP tool. It handles input normalization, retrieves authentication token and client, and delegates to the _send_invite helper function to execute the core logic.
        name="send_invite",
        description=(
            "Send invite to sign a document or document group. "
            "This tool is ONLY for documents and document groups. "
            "If you have template or template_group, use the alternative tool: send_invite_from_template"
        ),
        tags=["send_invite", "document", "document_group", "sign", "workflow"],
    )
    def send_invite(
        ctx: Context,
        entity_id: Annotated[str, Field(description="ID of the document or document group")],
        orders: Annotated[
            list[InviteOrder] | str | None,
            Field(
                description="List of orders with recipients (can be a list or JSON string)",
                examples=[
                    [{"order": 1, "recipients": [{"email": "user@example.com", "role": "Signer 1", "action": "sign"}]}],
                    '[{"order": 1, "recipients": [{"email": "user@example.com", "role": "Signer 1", "action": "sign"}]}]',
                ],
            ),
        ] = None,
        entity_type: Annotated[
            Literal["document", "document_group"] | None,
            Field(description="Type of entity: 'document' or 'document_group' (optional). If you're passing it, make sure you know what type you have. If it's not found, try using a different type."),
        ] = None,
    ) -> SendInviteResponse:
        """Send invite to sign a document or document group.
    
        This tool is ONLY for documents and document groups.
        If you have template or template_group, use the alternative tool: send_invite_from_template
    
        Args:
            entity_id: ID of the document or document group
            orders: List of orders with recipients (can be a list or JSON string)
            entity_type: Type of entity: 'document' or 'document_group' (optional). If you're passing it, make sure you know what type you have. If it's not found, try using a different type.
    
        Returns:
            SendInviteResponse with invite ID and entity type
        """
        token, client = _get_token_and_client(token_provider)
    
        # Normalize orders parameter (handle JSON string input)
        normalized_orders = _normalize_orders(orders, InviteOrder)
    
        # Initialize client and use the imported function from send_invite module
        return _send_invite(entity_id, entity_type, normalized_orders, token, client)
  • The @mcp.tool decorator that registers the 'send_invite' tool with FastMCP, including name, description, tags, and input parameters.
        name="send_invite",
        description=(
            "Send invite to sign a document or document group. "
            "This tool is ONLY for documents and document groups. "
            "If you have template or template_group, use the alternative tool: send_invite_from_template"
        ),
        tags=["send_invite", "document", "document_group", "sign", "workflow"],
    )
    def send_invite(
        ctx: Context,
        entity_id: Annotated[str, Field(description="ID of the document or document group")],
        orders: Annotated[
            list[InviteOrder] | str | None,
            Field(
                description="List of orders with recipients (can be a list or JSON string)",
                examples=[
                    [{"order": 1, "recipients": [{"email": "user@example.com", "role": "Signer 1", "action": "sign"}]}],
                    '[{"order": 1, "recipients": [{"email": "user@example.com", "role": "Signer 1", "action": "sign"}]}]',
                ],
            ),
        ] = None,
        entity_type: Annotated[
            Literal["document", "document_group"] | None,
            Field(description="Type of entity: 'document' or 'document_group' (optional). If you're passing it, make sure you know what type you have. If it's not found, try using a different type."),
        ] = None,
    ) -> SendInviteResponse:
        """Send invite to sign a document or document group.
    
        This tool is ONLY for documents and document groups.
        If you have template or template_group, use the alternative tool: send_invite_from_template
    
        Args:
            entity_id: ID of the document or document group
            orders: List of orders with recipients (can be a list or JSON string)
            entity_type: Type of entity: 'document' or 'document_group' (optional). If you're passing it, make sure you know what type you have. If it's not found, try using a different type.
    
        Returns:
            SendInviteResponse with invite ID and entity type
        """
        token, client = _get_token_and_client(token_provider)
    
        # Normalize orders parameter (handle JSON string input)
        normalized_orders = _normalize_orders(orders, InviteOrder)
    
        # Initialize client and use the imported function from send_invite module
        return _send_invite(entity_id, entity_type, normalized_orders, token, client)
  • Pydantic model for the response of the send_invite tool.
    class SendInviteResponse(BaseModel):
        """Response model for sending invite."""
    
        invite_id: str = Field(..., description="ID of the created invite")
        invite_entity: str = Field(..., description="Type of invite entity: 'document' or 'document_group'")
  • Pydantic model for invite orders used as input to send_invite.
    class InviteOrder(BaseModel):
        """Order information for invite."""
    
        order: int = Field(..., description="Order number for this step")
        recipients: list[InviteRecipient] = Field(..., description="List of recipients for this order")
  • Core helper function implementing the send invite logic, including entity type detection, and delegating to document-specific or document group-specific invite functions.
    def _send_invite(entity_id: str, entity_type: Literal["document", "document_group"] | None, orders: list[InviteOrder], token: str, client: SignNowAPIClient) -> SendInviteResponse:
        """Private function to send invite to sign a document or document group.
    
        Args:
            entity_id: ID of the document or document group
            entity_type: Type of entity: 'document' or 'document_group' (optional). If you're passing it, make sure you know what type you have. If it's not found, try using a different type.
            orders: List of orders with recipients
            token: Access token for SignNow API
            client: SignNow API client instance
    
        Returns:
            SendInviteResponse with invite ID and entity type
        """
    
        # Determine entity type if not provided
        document_group = None  # Store document group if found during auto-detection
    
        if not entity_type:
            # Try to determine entity type by attempting to get document group first (higher priority)
            try:
                document_group = client.get_document_group(token, entity_id)
                entity_type = "document_group"
            except Exception:
                # If document group not found, try document
                try:
                    client.get_document(token, entity_id)
                    entity_type = "document"
                except Exception:
                    raise ValueError(f"Entity with ID {entity_id} not found as either document group or document") from None
    
        if entity_type == "document_group":
            # Send document group field invite
            # Get the document group if we don't have it yet
            if not document_group:
                document_group = client.get_document_group(token, entity_id)
    
            return _send_document_group_field_invite(client, token, entity_id, orders, document_group)
        else:
            # Send document field invite
            return _send_document_field_invite(client, token, entity_id, orders)

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/mihasicehcek/sn-mcp-server'

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