Happily.ai MCP by usefulapi
Read members, survey responses and recognition; send recognition in Happily.ai.
Should I use this
Quality & Safety
Findings (1)
- LOWin happily_list_performance_feedback
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (8)
🟢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
Evidence