Happily.ai MCP by usefulapi

Read members, survey responses and recognition; send recognition in Happily.ai.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
94%
Naming quality
77%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'happily_list_performance_feedback' name length outside 3-30 rangein happily_list_performance_feedback

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,296Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (1.79% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "happily-ai": {
      "url": "https://happily-ai.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://happily-ai.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢happily_list_members(email, team_id, talent_type, company_id, page, ...)

List the company's members (name, email, team, talent type). Filter by email, team id, talent type or company id. Returns `members` and `pagination`. API: GET /1/members.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "description": "Only the member with this email.",
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "team_id": {
      "description": "Only members of this team id.",
      "type": "string"
    },
    "talent_type": {
      "description": "Filter by talent type.",
      "type": "string"
    },
    "company_id": {
      "description": "Filter by company id.",
      "type": "string"
    },
    "page": {
      "description": "Page number, 1-based (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Items per page (default 50, maximum 250).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 250
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢happily_get_member_profile(email, include_personal_context, context_limit)

Get one member's engagement profile: impact rating, engagement health score and status, and optional personal context (recent challenges, skills, values). Personal data: ask only for a member the user names. API: GET /api/v1/users/{email}/profile.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "The member's email address."
    },
    "include_personal_context": {
      "description": "Include the personal_context block (API default true).",
      "type": "boolean"
    },
    "context_limit": {
      "description": "Maximum items per personal-context list (1-50, default 10).",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "email"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢happily_list_questions(type, skill, dimension, page, limit)

List the survey questions in the company's question bank. Filter by type, skill or dimension. Returns `questions` and `pagination`. API: GET /1/questions.

Input Schema

{
  "type": "object",
  "properties": {
    "type": {
      "description": "Filter by question type.",
      "type": "string"
    },
    "skill": {
      "description": "Filter by skill.",
      "type": "string"
    },
    "dimension": {
      "description": "Filter by dimension.",
      "type": "string"
    },
    "page": {
      "description": "Page number, 1-based (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Items per page (default 50, maximum 250).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 250
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢happily_list_responses(email, question_id, date_from, date_to, page, ...)

List survey responses. Filter by member email, question id and date range. Returns `responses` and `pagination`. API: GET /1/responses.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "description": "Only responses from this member.",
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "question_id": {
      "description": "Only responses to this question id (from happily_list_questions).",
      "type": "string"
    },
    "date_from": {
      "description": "Start date yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "End date yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "page": {
      "description": "Page number, 1-based (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Items per page (default 50, maximum 250).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 250
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢happily_list_recognitions(email, team_name, page, limit)

List recognition (coins and messages) that members received. Filter by recipient email or team name. Returns `recognitions` and `pagination`. API: GET /1/recognition.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "description": "Only recognition received by this member.",
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "team_name": {
      "description": "Only recognition received by this team.",
      "type": "string"
    },
    "page": {
      "description": "Page number, 1-based (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Items per page (default 50, maximum 250).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 250
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢happily_get_medal(medal_id)

Resolve a medal or reward identifier (for example `Kindness`) to the value configured for the company. If the medal is not configured, the value repeats the identifier. API: GET /1/recognition/medal/{medal_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "medal_id": {
      "type": "string",
      "minLength": 1,
      "description": "The medal identifier, for example Kindness."
    }
  },
  "required": [
    "medal_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢happily_list_performance_feedback(email, reviewer_email, date_from, date_to, page, ...)

List performance feedback entries. Filter by member email, reviewer email and date range. Personal data: ask only for people the user names. Returns `feedback` and `pagination`. API: GET /1/performance_feedback.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "description": "Only feedback about this member.",
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "reviewer_email": {
      "description": "Only feedback written by this reviewer.",
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "date_from": {
      "description": "Start date yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "End date yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "page": {
      "description": "Page number, 1-based (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Items per page (default 50, maximum 250).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 250
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴happily_send_recognition(sender_email, recipients, amount, message, display_feed)

WRITE: give recognition coins from a sender to named members. This spends the sender's coins and notifies the recipients. Confirm the sender, the recipients, the amount and the message with the user first. Recipients must be explicit emails (no team, cohort or ALL_MEMBERS). API: POST /1/recognition/{member_email}.

Input Schema

{
  "type": "object",
  "properties": {
    "sender_email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Email of the member who gives the recognition. The member must belong to the company."
    },
    "recipients": {
      "minItems": 1,
      "maxItems": 25,
      "type": "array",
      "items": {
        "type": "string",
        "format": "email",
        "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      },
      "description": "Emails of the members who receive the recognition."
    },
    "amount": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000,
      "description": "Coins to give."
    },
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "description": "The reason for the recognition."
    },
    "display_feed": {
      "description": "Show the recognition in the company feed (default false).",
      "type": "boolean"
    }
  },
  "required": [
    "sender_email",
    "recipients",
    "amount",
    "message"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools