answer_structured_feedback
ChatGPTWrites answers to a structured feedback request you have been asked to give, and optionally submits it. PREREQUISITE: the list mode of get_feedback_requests gives you the evaluation_id; then call get_feedback_requests with that structured_feedback_id to get the question_id values and each question's scale. Two usage shapes: 1. Save progress (draft): { evaluation_id, answers } with submit omitted or false. Saves the answers as drafts. Nothing is sent. Use this while gathering the user's input. 2. Submit: { evaluation_id, answers, submit: true }. Saves the answers as final and submits the whole request. Include EVERY answer you want submitted in this call, not just the required ones: previously saved drafts are NOT carried over automatically, and submitting with a draft answer left out is rejected. Pass "skip-question" for any optional question you want to leave unanswered. After submission the structured feedback can no longer be edited, so confirm with the user before submitting. Answer values: - Numeric-scale questions: pass a number within the question's scale (see get_feedback_requests for the range). - Open-text questions: pass a string. - To skip an optional question, pass the string "skip-question". Required questions cannot be skipped. Common errors: - "No accessible structured feedback request": wrong evaluation_id, different workspace, or not assigned to you. - "Question X does not belong to this structured feedback": the question_id is not part of this request. - "required questions are unanswered": you tried to submit without answering every required question. Examples: - Save drafts: { "evaluation_id": 42, "answers": [{ "question_id": 7, "value": 4 }] } - Submit: { "evaluation_id": 42, "answers": [{ "question_id": 7, "value": 4 }, { "question_id": 8, "value": "Great collaborator." }], "submit": true }
cancel_calendar_event
ChatGPTCancel a calendar event that was created by Teamspective AI. Supports both Google Calendar and Microsoft Outlook. When to use: - "Cancel the meeting I just created" - "Remove the 1:1 we scheduled" Parameters: - event_id: The event ID returned when the event was created Only the organizer (the person who created the event) can cancel it. Attendees will be notified of the cancellation.
create_calendar_event
ChatGPTCreate a calendar event and send invites to attendees. Supports both Google Calendar and Microsoft Outlook. When to use: - After checking calendar availability and agreeing on a time - "Book a meeting with [person] on Thursday at 2pm" - "Create a 1:1 with [person] for the time we agreed" Requirements: - The workspace must have a calendar integration connected with write access enabled - Always check availability first using get_calendar_availability before creating events Parameters: - title: Event title (e.g., "1:1: Sophie & Mark") - start_time: ISO 8601 datetime (e.g., "2026-03-15T14:00:00") - duration_minutes: 15 to 480 minutes - attendees: Array of user IDs or names to invite. Use "me" for yourself. - description: Optional agenda or description - timezone: (optional) IANA timezone (e.g., "Europe/Helsinki"). Defaults to your profile timezone if set.
documents_update_or_create
ChatGPTCreate a new personal development document or update an existing one. Documents are personal development docs (IDPs, performance assessments, individual targets) created from templates. IMPORTANT: This tool modifies data. Always confirm with the user before creating or updating documents. CRITICAL: Template compliance. Every document has a template that defines its structure (headings, sections, prompts). The content you write MUST preserve the template structure exactly as a human would fill it in from the UI. This means: - Keep ALL template headings and section titles unchanged - Write your answers/content UNDER each template section - Never remove, rename, or reorder template sections - If a section is not applicable, leave the heading and write "N/A" or similar underneath Recommended workflow: 1. Call get_document_templates to see available templates and pick the right one 2. Call get_feedback for the subject user (last 6-12 months) to understand their strengths, growth areas, and recent feedback themes 3. Call get_documents with the document_id to read the current content AND template structure 4. Then call this tool with the COMPLETE document content that synthesizes existing content, feedback insights, and new input into a cohesive whole CRITICAL: Content is a full replacement, not an append. When updating, you must provide the entire document content. Read the existing content first, then produce a unified version that integrates old and new material. Do not simply append new text at the end. Creating a new document: - Provide template_id (required). Use get_document_templates to find the correct ID. - Content is optional on create. If omitted, the document is created with the template's default content. You can then read it with get_documents and update it with this tool. - If content is provided, it MUST follow the template structure. Updating an existing document: - Provide document_id and content - Only draft documents can be edited - Content MUST follow the template structure (returned in the response) Parameters: - document_id: (optional) Document ID to update. If omitted, creates a new document. - template_id: Template ID (number). Required when creating. Use get_document_templates to find available templates. - subject_user: (optional) User ID or name for the document subject. Defaults to self. - content: (optional for create, required for update) Document content in markdown format. Must follow the document's template structure. Examples: - Create empty: { "template_id": 1 } — creates with template content, returns template structure - Create for someone: { "template_id": 1, "subject_user": "Sarah" } - Update: { "document_id": 42, "content": "## Goals (from template)\nMy filled-in goals here..." } Common errors: - "Template not found": Use get_document_templates to see available templates and their IDs. - "Permission denied": You can only edit draft documents where you have editor access.
get_calendar_availability
ChatGPTFind available meeting times by checking participants' calendar availability. Supports both Google Calendar and Microsoft Outlook. Returns free time ranges when all participants are available. When to use: - "When can I meet with [person]?" - "Find a time for a 1:1 with [person]" - "What's [person]'s availability this week?" - "Schedule a meeting with [person] next week" - Suggesting times for 1:1 discussions or team meetings How it works: - Checks calendar free/busy data for all specified participants - Finds overlapping free time during working hours (09:00–17:00) - Returns free time ranges (not fixed slots) — suggest specific meeting times from these ranges - Only considers weekdays (Monday–Friday) - Automatically detects the workspace's calendar provider (Google or Microsoft) Requirements: - The workspace must have a calendar integration connected (Google Calendar or Microsoft Outlook) - Users must be in the connected calendar system Parameters: - users: (required) Array of user IDs (numbers) or names (strings) to check availability for. Use search_users to find user IDs. - days: (optional, default: 5, max: 14) Number of weekdays to look ahead. - event_duration_minutes: (optional, default: 30) Minimum meeting duration: 30, 45, or 60 minutes. Free ranges shorter than this are excluded. - timezone: (optional) IANA timezone for the results. Defaults to your profile timezone if set. Examples: - Find 30min slot with one person → { "users": ["Sophie Taylor"], "timezone": "Europe/Helsinki" } - Find 1h slot with two people → { "users": [42, 57], "event_duration_minutes": 60, "timezone": "Europe/Helsinki" } - Look ahead 2 weeks → { "users": ["Mark"], "days": 14, "timezone": "America/New_York" } Common errors: - "Calendar is not connected": An admin needs to connect a calendar integration in workspace settings. - "Calendar not found": The user may not be in the connected calendar system. - "Multiple users match": Be more specific with the user name or use a user ID.
get_discussion_templates
ChatGPTList available discussion templates for the workspace. Discussion templates define the structure for 1:1 meeting agendas, feedback call agendas, and other recurring discussion formats. IMPORTANT: Read templates BEFORE creating 1:1 agendas or discussion notes. Templates contain the workspace's preferred structure for different meeting types. When preparing a 1:1 agenda, calendar event, or discussion, always check templates first and incorporate their structure into your suggestions. When to use: - Before creating a discussion with discussions_save (to see available agenda structures) - Before suggesting a 1:1 agenda or meeting preparation notes - When the user asks "What discussion templates are available?" - When preparing for any recurring meeting format Returns: - Template name, type (default or workspace-specific), and full content - Default templates are built-in; workspace templates are custom to the organization Examples: - List all templates → {}
get_discussions
ChatGPTList and read 1:1 or team discussions. Discussions are meeting containers with rich-text notes and threaded comments, used for 1:1s, team meetings, and other recurring conversations. When to use: - "Show my discussions" or "What 1:1s do I have?" - "Show notes from my discussion with [person]" - "What was discussed in [discussion name]?" - Preparing for a 1:1 or reviewing past meeting notes - Looking for action items from discussions How it works: - List mode (no discussion_id): Returns compact summaries — names, participants, note/comment counts with latest note date, last activity date. Use this first to find the discussion you need. - Detail mode (discussion_id provided): Returns filtered notes (by time period and limit) with full content, note IDs, and comments. Note IDs are needed for updating notes via discussions_save. Permissions: You can see discussions where you are a participant, or where you manage a participant (as their manager/admin). Parameters: - discussion_id: (optional) Fetch a specific discussion with full notes and comments. Get IDs from list mode. - include_archived: (optional, default: false) Include archived discussions in listing. - limit: (optional, default: 20) Max items to return — discussions in list mode, notes in detail mode. - time_period_days: (optional, default: 90) How many days back to look for note activity in detail mode. Notes with recent comments/edits are included even if the note was created earlier. Aligned with feedback tools (default: ~3 months). Examples: - List all active discussions → {} - List including archived → { "include_archived": true } - Read a specific discussion (recent notes) → { "discussion_id": 42 } - Read more notes → { "discussion_id": 42, "limit": 30, "time_period_days": 180 } - Read older notes (last year) → { "discussion_id": 42, "limit": 100, "time_period_days": 365 } Common errors: - "Discussion not found or you don't have access": The discussion doesn't exist or you're not a participant/manager. Use get_discussions without discussion_id to see accessible discussions.
get_document_templates
ChatGPTList available document templates for the workspace. Use this tool to discover which templates exist before creating a document with documents_update_or_create. When to use: - Before creating a new document, to see which templates are available - When the user asks "What document types can I create?" - To get the template ID needed for document creation Returns: - Template name, ID, type key, and whether self-creation is allowed - Use the template ID (number) when calling documents_update_or_create
get_documents
ChatGPTList and read personal development documents. Documents are personal development docs (IDPs, performance assessments, individual targets) created from templates, with a draft → approved workflow and optional manager review. When to use: - "Show my documents" or "What IDPs do I have?" - "Show [person]'s development plan" - "What documents need review?" - "What documents have been shared with me?" - "How many HQ employees have completed their performance assessment?" - Reviewing document content before a 1:1 discussion - Checking document status (draft, approved, archived) - Getting document completion stats for a segment How it works: - List mode (no document_id): Returns users with their documents (type, template name, status, updated date) plus a per-status summary with counts and percentages. No content in list mode. Token-efficient for browsing. - Shared with me mode (shared_with_me: true): Shows documents that others have shared with you (directly or via segments), excluding users you already see in the default listing. Useful for discovering documents from people outside your management chain. - Detail mode (document_id provided): Returns full document content as plain text, template info, approval status, reviewer info. Provide the user parameter to identify the document owner (defaults to self if omitted). Filtering by segment and document type (admin only): To answer "How many people in [segment] have completed their [document type]?": 1. Use get_workspace_overview to find the segment ID for the target group 2. Use get_document_templates to find the document type key (e.g., "performance_assessment") 3. Call get_documents with segment_id and/or document_type to get filtered stats Permissions: - You always see your own documents - Managers see documents of their direct reports - Admins see all users but documents they have no share access to appear as private - Shared-with-me shows documents explicitly shared with you, from users outside your normal view - segment_id filter is admin-only. Non-admins get a clear error. Parameters: - document_id: (optional) Fetch a specific document with full content. Get IDs from list mode. - user: (optional) Filter by user (numeric ID preferred, or name). Defaults to showing all accessible users. Cannot be combined with shared_with_me. - status: (optional) Filter by status: "all", "no-document" (users without documents), "draft", "pending-review", "approved", "archived". Default shows all. Note: "no-document" is not available in shared-with-me mode. - shared_with_me: (optional, default: false) When true, shows documents shared with you by others outside your normal management view. Cannot be combined with the user filter. - segment_id: (optional, admin only) Filter by segment. Get segment IDs from get_workspace_overview. Returns forbidden for non-admins. - document_type: (optional) Filter by document type key (e.g., "performance_assessment", "idp"). Get type keys from get_document_templates. - limit: (optional, default: 20) Max users to return in listing. Examples: - List all documents → {} - Documents for a specific person → { "user": "Sarah" } or { "user": 12345 } - Only draft documents → { "status": "draft" } - Documents shared with me → { "shared_with_me": true } - Shared drafts needing attention → { "shared_with_me": true, "status": "draft" } - Read specific document → { "document_id": 42, "user": 12345 } - Stats for HQ segment's performance assessments → { "segment_id": 456, "document_type": "performance_assessment" } - Who hasn't started in a segment → { "segment_id": 456, "document_type": "performance_assessment", "status": "no-document" } Common errors: - "Document not found": The document doesn't exist or you don't have access. Use get_documents without document_id to see available documents. - "No user found matching X": The name doesn't match. Use search_users for IDs. - "Access denied": You don't have admin permission for segment filtering. Non-admins should use the user paramet…
get_engagement_results
ChatGPTReturns engagement survey results for a team including KPIs, themes, questions, trends, and AI-ready insights. PREREQUISITE: Call get_user_context first to get the user's home team ID and see which teams they can access. This tool requires a valid team ID or name. When to use: - "How is my team doing?" or "What are our engagement trends?" - Questions about specific metrics: "leadership score", "psychological safety", "wellbeing" - "What needs attention?" or "Where are we struggling?" - Comparing current vs previous survey results Understanding the data: - Scores are 0-100 (higher is better). Industry average is typically 65-75. - Trends show change from previous survey period (e.g., "+5" means 5 points improvement) - KPIs are high-level metrics: Overall Engagement, Leadership, Wellbeing, DEIB - Themes are components under KPIs: Psychological Safety, Recognition, Growth, etc. - Questions are individual survey items that make up themes - "Redacted" means insufficient responses (<4) to protect anonymity Insight labels (pre-interpreted for you): - 📈 Trending up / 📉 Trending down: Significant change vs last period - ✅ Above benchmark / ⚠️ Below benchmark: Compared to industry average - 💪 Stronger/Weaker than workspace: Team vs company average Common errors: - "No team found matching X": The team name doesn't exist or user lacks access. Call get_user_context to see available teams. - "You don't have access to team X": User lacks permission for that team's engagement data. - "No engagement survey results available": Team hasn't completed surveys yet. Historical questions: By default, only questions asked within the current survey window are shown, matching the UI. Questions from older surveys (before the survey window started) are hidden unless you set include_historical=true. Examples with exact parameters: - "How is my team doing?" → { } (uses workspace default, but prefer getting team ID from get_user_context first) - "Engineering team engagement" → { "team": "Engineering" } or { "team": 12345 } - "Quick summary without questions" → { "include_questions": false } - "Just the scores, no insights" → { "include_insights": false } - "Show all questions including historical" → { "include_historical": true }
get_engagement_statistics
ChatGPTLive participation statistics for engagement surveys that are CURRENTLY collecting answers: real-time response rates while a survey is open. For managers, includes the live response rate among their own direct reports (and all reports incl. indirect). Use for "what is the response rate right now", "have my direct reports answered", "how is survey participation going". Covers recurring and one-off survey rounds; continuous lifecycle surveys are not included. NOT for survey scores/results (use get_engagement_results), completed surveys' history (use list_surveys), or per-team breakdowns (use get_engagement_results with a team ID).
get_engagement_trend
ChatGPTReturns how engagement metrics move over time — a time series rather than the single aggregated snapshot get_engagement_results gives. PREREQUISITE: Call get_user_context first to get the user's home team ID and see which teams they can access. When to use: - "How is engagement trending?" / "Is leadership improving?" - "Show me eNPS over time" / "psychological safety by quarter" - Any question about change across multiple surveys, not a single period Defaults: with no arguments, charts the pinned overview metrics (the KPIs, themes and questions pinned to the engagement overview), one point per completed survey, over the last 2 years. Use get_engagement_results for the current-period snapshot. Scope: one team OR one segment per call (loop for breakdowns like "by department over time"). Use survey_context to scope to a specific program / recurring survey / round, bucketing for monthly/quarterly/yearly buckets, and period to widen or narrow the time window. Reading the data: scores are 0-100 for most metrics (higher better); an organization that reports response averages shows them on the 1-5 scale with two decimals instead (e.g. "4.02/5"); eNPS ranges from -100 to +100, so negative values there are normal, not errors. The "Δ vs prev" column is the change from the previous point. "redacted" means too few responses to show (anonymity protection). Action tips: charting a single question (metric_type "question") also returns the action tips the organization configured for it, if any. Base advice about that question on them.
get_feedback
ChatGPTReturns feedback data for the user or their direct reports. Includes growth feedback, praise, and performance evaluations with full text content. PREREQUISITE: Call get_user_context first to confirm if the user is a manager (has direct reports) before using target: "direct_reports". When to use: - "Show me my feedback" or "What feedback have I received?" - "How is [person] doing?" (for direct reports) - "Team feedback summary" or "feedback trends" - Preparing for 1-on-1s or performance discussions Understanding feedback types: - Growth feedback: Developmental feedback with specific observations and suggestions - Praise: Recognition and positive feedback - Evaluations: Structured performance review responses (from 360 reviews, etc.) What you get: - Full text content of each feedback item - Provider name (who gave the feedback) - Timestamp and topic/category - Feedback type (growth, praise, evaluation) Permissions: - Users can always see their own feedback (target: "self") - Viewing direct reports' feedback requires manager access enabled by workspace admin - If user has direct reports but can't see their feedback, it's a workspace permission setting Common errors: - "No direct reports found matching X": The name doesn't match any of your direct reports. Use get_user_context to see your direct reports. - "User ID X is not one of your direct reports": The ID doesn't belong to your direct reports. - "You don't have permission to view feedback for X": The user is your direct report but workspace settings don't allow viewing their feedback. Examples with exact parameters: - "My recent feedback" → { "target": "self", "time_period_days": 30 } - "Sarah's feedback" → { "target": "direct_reports", "direct_report": "Sarah" } - "Feedback for user 12345" → { "target": "direct_reports", "direct_report": 12345 } - "All team feedback this quarter" → { "target": "direct_reports", "time_period_days": 90 }
get_feedback_requests
ChatGPTReturns the feedback requests visible to the caller: everything other people want from them. This is the single answer to "what feedback requests do I have" or "what's on my plate". In list mode it unifies BOTH growth feedback requests AND pending structured feedback the caller has been asked to give, so you do not need a separate call to cover structured feedback. This one tool covers list and both detail kinds: - No id → the unified list. - request_id → full detail for one GROWTH request. - structured_feedback_id → full detail for one STRUCTURED feedback request: its questions, each scale with the exact accepted values, and any drafted answers — everything answer_structured_feedback needs. (The list gives you the structured_feedback_id for each pending structured item.) When to use: - "What feedback requests do I have to respond to?" → defaults (status: pending, direction: received). Returns both growth and structured. - "Show me request 1234" → pass request_id (growth detail) - "Let me answer my structured feedback for April" → pass structured_feedback_id from the list to get the questions, then call answer_structured_feedback - "Have I given Sarah feedback before?" → counterpart_user_id + status: all - "What requests have I sent out?" → direction: provided (growth only; structured is not included for this direction) Scope note: structured feedback is included in list mode only for the received direction and pending/all statuses (it represents what others are waiting on from you). The provided direction covers growth feedback only. Status values: - pending: the request has not been responded to (the provider has either not started or has only a draft saved) - fulfilled: the feedback has been provided - all: both Direction values (relative to the caller): - received: requests where the caller is the feedback provider (someone asked them for feedback) - provided: requests where the caller is the requester (they asked someone for feedback) - all: both Common errors: - "No accessible feedback request with ID X": the request may not exist or belong to another workspace, or the caller is not a participant on it. Don't retry; ask the user to check the URL or use the list mode without request_id. Examples: - "What's on my plate?" → {} (defaults to pending received) - "Detail of request 42" → { "request_id": 42 } - "My open requests to Jaakko" → { "direction": "provided", "counterpart_user_id": <jaakko's user_id> }
get_feedback_statistics
ChatGPTReturns feedback activity metrics for a team: requests, fulfillment rates, praise counts, and per-person breakdown. When to use: - "How many feedback requests were sent?" or "What's our fulfillment rate?" - "How active is our feedback culture?" or "Who's most active in giving feedback?" - "Show me feedback statistics for last quarter" - Comparing feedback activity across teams (call for each team) What it returns: - Aggregate stats: total requests, fulfilled count, fulfillment rate %, praise count - Unique participants: how many people are requesting vs providing - Per-person breakdown: requests sent, fulfilled, feedback provided, praise sent Permission behavior: - Admins with accessFeedbackStats see full team data - Managers without team-level access see stats for their managed users only Distinct from `get_feedback`: - This tool answers "How active is feedback?" (quantitative metrics) - get_feedback answers "What does the feedback say?" (qualitative content) Examples: - "Feedback stats for the company" -> { } - "Engineering feedback activity last year" -> { "team": "Engineering", "time_range": "last_year" } - "Last 30 days feedback" -> { "time_range": "last_30_days" }
get_file
ChatGPTFetch a company principles file by resource ID and return its content. When to use: - When you need to read the actual content of a company principles document - Content is pre-extracted and stored in the database for fast access Input: - resourceId: The numeric ID of the company principles resource (from get_user_context) Returns: - Pre-extracted text content ready for analysis Descriptions are only an index: read potentially relevant content before concluding the company has no guidance on a topic. Example workflow: 1. Take the resourceId from the company knowledge document list in the user context (the list get_user_context returns) 2. Call get_file with the resourceId of the document you want to read 3. Analyze the returned text content
get_performance_tags
ChatGPTLists the organization's cycles (e.g. "2026 H1", "Q3 2025") and process types (e.g. "Annual review", "Probation review"). Admins label structured feedback with them, and get_feedback filters by them. When to use: - Before calling get_feedback with cycle or process_type, to find the exact name or the ID - "Which review cycles do we have?" / "What kinds of reviews does the organization run?" - When the user names a cycle or process type that get_feedback did not recognise What you get: - Every cycle and process type with its ID. Archived ones are marked "archived"; they still appear on old feedback and can still be used as a filter. Examples: - All tags → {} - Only cycles → { "kind": "cycle" } - Only process types → { "kind": "process_type" }
get_person_context
ChatGPTReturns workspace-scoped context for another user: their role description, home team, and their relationship to you. All of it is what every workspace member can see of a colleague in Teamspective. When to use: - "Who is Jaakko? What's his role?" → resolve their user_id with search_users first, then call this - Drafting feedback / 1:1 notes / praise where knowing the target's role would inform tone and content - Determining how you relate to the target (manager / direct_report / peer / etc) before composing a message Not for: - Your own profile. Use get_user_context for that. - A colleague's focus areas. They are visible only inside a feedback request you take part in: read them from the Topics of get_feedback_requests({ request_id }). If there is no such request, tell the user the focus areas are not available to you and do not guess them. Relationship values returned: - manager — target manages you (directly or as a segment manager of a segment you're in) - direct_report — you manage target (directly or as a segment manager of a segment they're in) - secondary_manager — target is your horizontal-lead / mentor (a secondary manager kind) - secondary_report — you are target's horizontal-lead / mentor - peer — you share a direct manager with the target - colleague — workspace member with no closer link - external — target is not a workspace member (only name + ID returned) Common errors: - "No user found with ID X": user does not exist. Use search_users to find user IDs by name. - "That user_id is the caller themselves": caller passed their own user_id. Use get_user_context for self. Example: { "user_id": 12345 }
get_personal_engagement_answers
ChatGPTReturns the authenticated user's own engagement survey answers, grouped by question with chronological history and trend indicators. When to use: - "How have my engagement answers changed?" or "Show me my pulse history" - "What did I answer about work-life balance?" or "What was my last engagement response?" - "Show me my answers" or "How have I been feeling at work?" - Self-reflection and personal engagement tracking What it returns: - Answers grouped by question, sorted by most recently answered - For each question: chronological answer history with dates and values - Choice labels (e.g., "4 - Agree" instead of just "4") - Comments attached to answers - Trend indicators: 📈 improved, 📉 declined, ➡️ stable Access requirements: - The workspace must have "My Answers" enabled (workspace setting) - Returns only the calling user's own answers (no one else's data) Distinct from `get_engagement_results`: - This tool shows the user's personal answers (individual level) - get_engagement_results shows team-level aggregated scores and themes Examples: - "Show my answers" -> { } (no parameters needed)
get_user_context
ChatGPTReturns the authenticated user's identity, role, teams, and data access permissions. IMPORTANT: Call this tool first before using other Teamspective tools. It provides essential context about who you're speaking with and what data they can access. When to use: - START OF CONVERSATION: Always call this first to understand the user's context - Before calling get_engagement_results (to know which teams they can query) - Before calling get_feedback with target: "direct_reports" (to confirm they're a manager) - When user asks "who am I?", "what's my team?", or about their profile Returns: - Identity: name, email, numeric user ID - Role: "Manager" (has direct reports) or "Individual Contributor" - Profile attributes: job title, department, location (from HRIS, if available) - Home team: their primary team with team ID (use this ID in other tools) - Direct reports: list with names, emails, and user IDs (if manager) - use these IDs with get_feedback - Teams: all teams they belong to with team IDs - Engagement access: count of teams they can query for engagement results Key concepts: - "Workspace" = the organization/company in Teamspective - "Team" = a group within the workspace (e.g., Engineering, Sales) - "Home team" = the user's primary team, used as default when no team is specified - Team IDs are numeric (e.g., 12345) and more reliable than team names for queries Example: User says "How is my team doing?" → First call get_user_context to get their home team ID, then call get_engagement_results with that team ID.
get_workspace_overview
ChatGPTReturns the organization's team hierarchy and available segments, showing all teams the user has visibility into. When to use: - "Show me the organization" or "What teams exist?" - "What teams can I look at?" or "Show me the team structure" - "What segments are available?" or "Show me departments/locations" - Before querying specific teams for engagement or feedback data (to discover team IDs) - Before filtering engagement by segment (to discover segment attribute keys and values) - When an admin needs to navigate the organization to find specific departments What it returns: - Hierarchical tree of all teams the user can access (based on engagement + feedback permissions) - Team names and IDs (use IDs in subsequent tool calls for reliable lookups) - Indentation showing parent-child relationships - Total count of visible teams - Available segments with attribute keys and values (for admins and segment managers) Relationship to other tools: - Use this tool to discover team IDs, then use those IDs with: - get_engagement_results for survey scores and themes - get_feedback_statistics for feedback activity metrics - get_engagement_statistics reports live response rates for open surveys (no team argument — it covers the caller's own reports) - Use segment attribute/value pairs with get_engagement_results for segment-filtered results - get_user_context shows the user's own teams; this tool shows the full org structure they can access Examples: - "Show me the full org" -> { } - "Show Engineering sub-teams" -> { "team": "Engineering" } or { "team": 12345 }
list_questions
ChatGPTList questions from the workspace question bank. ALWAYS use this before creating a survey — prefer reusing existing questions over creating new ones. Output per question: ID (use in save_survey), name, title text, scale, theme, KPI, and when last asked.
list_surveys
ChatGPTDiscover surveys, recurring surveys, and survey programs in the workspace. Default kind="all" returns three sections (single, recurring, program); narrow with kind. With id you also MUST pass kind: "single" returns full question content, "recurring" returns the question schedule for upcoming rounds with per-question targeting, plus its completed rounds (newest first, up to the most recent 300) with each Round ID for survey_context.round_ids in get_engagement_results, when the caller can see results; "program" returns program metadata.
save_survey
ChatGPTCreate or update a survey draft. If id is provided, updates the existing draft; otherwise creates a new one. ALWAYS use list_questions first to find question IDs. Surveys are created as DRAFTS — the admin must review and launch from the web UI. Create: Provide name, start_date, end_date, and questions array. Question order = ask order. Update: Provide id. Use add_questions/remove_questions to modify the question list. Only drafts can be edited. Examples: - Create: { "name": "Q1 Engagement", "start_date": "2026-04-01", "end_date": "2026-04-14", "questions": [{ "question_id": 1 }, { "question_id": 2 }] } - Add questions: { "id": 42, "add_questions": [{ "question_id": 5 }] } - Remove questions: { "id": 42, "remove_questions": [3] }
search_users
ChatGPTSearch workspace users by name/email/ID or discover users by filter (team, segment, is_manager). Returns user IDs, home team, caller-visible segment memberships, and — for users who manage reports — manager-scoped segment IDs (directReports, allReports) ready to copy into engagement queries. Title and department are included only for people whose feedback the caller can access (themselves, and the people their current feedback permissions cover; being someone's HRIS manager grants this only where the workspace's feedback settings say so), the same access rule as the Teamspective web app; for everyone else they are withheld, and the result says so. When to use: - The user references a person by name and you need their numeric user ID before calling get_feedback, get_engagement_results, or similar. - You need to find every manager (or every member) in a department, team, or segment — e.g. "Who are the engineering managers?", "List everyone in Marketing". - You need a manager's directReports segment to query engagement/feedback for their team. - You need to enumerate a small set of users to iterate over (capped at 50; ask a narrower question if more are needed). Do not use to list an entire workspace (too broad). If every filter is empty the tool returns an error asking for narrower input. Parameters (all optional, but at least one filter is required): - query: substring match on first name / last name / email / group name. Use "userId:NNN" to look up an exact user ID (a bare number is treated as plain text). - team: team ID (number) or team name (string, resolved case-insensitively among the caller's visible teams). Expands to the full subtree — "Engineering" includes all sub-teams. - segment_attribute + segment_value: paired filter (both required together). For engagement attributes, membership is profile-hidden; use only publishable attributes like department, tenure, location, etc. See get_workspace_overview for exact keys and values. - is_manager: true → only users with at least one direct report. false is a no-op; omit instead. - limit: 1-50, default 25. Prefer narrower filters over larger limits. Result shape: one bullet per user with User ID (copy this), name, email, home team (plus title/department when the caller can access that person's feedback), visible segment memberships, and for managers a "Manages:" block listing each manager-scoped segment with its segment_attribute / segment_value / segment_id — three fields ready to paste into get_engagement_results to query that manager's team. Relationship to other tools: - Call get_workspace_overview first to discover team/segment names when the user uses fuzzy language. - Use the returned user IDs with get_feedback, get_personal_engagement_answers, or get_user_context. - Use the returned directReports / allReports segment IDs with get_engagement_results to analyse a manager's team. - get_user_context returns only the caller's own direct reports; this tool discovers arbitrary users across the workspace. Example — resolve a name to a user ID: `` { "query": "Sarah Lee" } ` Pick the matching user from results, then pass their User ID to get_feedback. **Example — breakdown by manager ("eNPS in Marketing by manager"):** 1. get_workspace_overview → confirm there is a "department" attribute with value "Marketing". 2. search_users({ segment_attribute: "department", segment_value: "Marketing", is_manager: true }) → returns one bullet per Marketing manager, each with a "Manages:" block containing their directReports segment_attribute / segment_value / segment_id. 3. For each manager, call get_engagement_results({ segment_attribute: "directReports", segment_value: "userId:<managerUserId>" }) in parallel to get the engagement score for that manager's team. 4. Synthesize the per-manager breakdown. Describe each team on its own; do not rank the managers against each other. **Examples:** - "Who is Mary Shelley?" → { "query": "Mary Shelley" } - "Everyone in Engineering" → { "team": "Engineering" }` - "Managers in Helsinki"…
send_praise
ChatGPTPreviews and sends praise (positive recognition) to one or more workspace members. Praise is published and recipients are notified immediately, so there is no separate draft step; use preview first to coach the user toward stronger praise. Flow: 1. Call with preview: true to get a quality check WITHOUT sending. Strong praise names a specific thing the person did and its impact; generic praise ("Great work!") is weak. 2. If the quality check flags the praise as weak, help the user add the specific behavior and its impact (ask what exactly happened and why it mattered), then preview again. 3. Once it is specific and the user confirms, call again with preview omitted (or false) to actually send. When to use: - "Praise Sarah for the great launch" - "Thank the design team for their work this sprint" - "Send recognition to user 12345" Behavior: - Without preview, publishes immediately and notifies every recipient (NOT reversible from here). - Praise sent here is always PUBLIC: announced to the workspace, including the Slack/MS Teams channels. There is no private option; do not offer to send praise privately. - All recipients receive the same praise text. To praise people for different things, call once per distinct message. The `recipients` parameter: - An array of user IDs (preferred), full names, or "me". Numeric IDs are more reliable; get them from get_user_context or search_users. You cannot praise yourself. Examples: - Preview: { "recipients": [12345], "content": "Great work on the fleet management!", "preview": true } - Send: { "recipients": [12345], "content": "Your fleet management overhaul cut our turnaround time in half and made the whole team's week smoother." }
submit_feedback
ChatGPTSends a saved feedback draft to the requester. Promotes the existing draft to "sent" and notifies the requester. Does NOT take content — whatever is currently in the saved draft is what gets sent. When to use: - Only after the user has explicitly confirmed they want to send. Show them the saved draft and ask first; do not submit unilaterally. - Only after save_feedback_draft has stored the current content. If the draft is stale, call save_feedback_draft again first. Why no content arg: the user may have edited the draft in the web UI (via the draft URL) between when you saved it and when they confirmed in chat. Submitting whatever is saved preserves their edits; passing content here would silently overwrite them. Common errors: - "No accessible feedback request": wrong request_id or you're not the provider. - "Already fulfilled": the request has been sent. Do not retry. Use get_feedback_requests to see what was sent. - "No draft saved": you skipped save_feedback_draft. Save the draft first, then submit. Example: { "request_id": 42 }
tasks_list
ChatGPTList actions in the workspace or get a single action by ID or number. When to use: - "Show me my actions" or "What actions do I have?" - "List all active actions" or "Show todo actions" - "Get action ACT-123" or "Show action 456" - "Actions assigned to [person]" - "Team actions for Engineering" Action statuses: - draft: Not yet visible to others - todo: Ready to be worked on - active: Currently being worked on - done: Completed - canceled: No longer needed Getting a single action: - Use task_id for numeric ID lookup (e.g., task_id: 123) - Use task_number for action number lookup (e.g., task_number: "ACT-123") - Single action view includes full description Filtering actions: - status: Filter by action status (todo, active, done, etc.) - assignee: Filter by assignee (user ID or name) - team: Filter by team (team ID or name) — actions assigned to a member of the team or any team under it, plus actions that belong to the team itself - limit: Maximum number of actions to return (default: 20) Examples with exact parameters: - "My actions" → { "assignee": "me" } - "Active actions" → { "status": "active" } - "Action ACT-42" → { "task_number": "ACT-42" } - "Actions for John" → { "assignee": "John" } - "Engineering team actions" → { "team": "Engineering" }
tasks_update_or_create
ChatGPTCreate a new action or update an existing one. IMPORTANT: This tool modifies data. Always confirm with the user before creating or updating actions. When to use: - "Create an action to..." or "Add a new action for..." - "Update action ACT-123 to..." or "Change status of action 456 to done" - "Assign action to [person]" or "Set deadline for action" - "Mark action as done" or "Complete action ACT-123" Creating a new action: - Provide title (required) and optionally description, status, visibility, assignee, team, deadline, add_connections - Default status is "todo", default visibility is "public" Updating an existing action: - Provide either task_id or task_number to identify the action - Then provide the fields you want to update - Fields not provided will remain unchanged - Set a field to null to clear it (e.g., assignee: null to unassign) Action fields: - title: Action title (required for create) - description: Detailed description text (supports markdown) - status: draft | todo | active | done | canceled - visibility: private | limited | team | public - assignee: User ID, user name, "me" for yourself, or null to unassign - team: Team ID, team name, or null to remove from team. The team the action belongs to, independent of the assignee — it makes the action show on that team's Team actions page. - deadline: ISO 8601 date string (e.g., "2024-12-31") or null to clear - insight_id: The engagement insight the action answers, when the conversation context names one. Always pass it then, a planned team discussion included: it is how the results Overview knows the insight has an action. - add_connections: what the action relates to, added to what it is already connected to. Attach the metric an action aims to move: its impact is measured by comparing that metric's survey results before and after the action is done. Each is { "type", and "id" or "name" }. Types: metric (a survey question whose results the action should move), discussion (a 1:1 or team discussion), document, feedback (a growth feedback request, by its Request ID only), survey_round (one round of a recurring survey, by the Round ID list_surveys lists only). At most 10 per action. - remove_connections: connections to take off an existing action, named the same way Status meanings: - draft: Not yet visible to others - todo: Ready to be worked on - active: Currently being worked on - done: Completed - canceled: No longer needed Examples with exact parameters: - Create: { "title": "Review quarterly report", "assignee": "John", "deadline": "2024-12-31" } - Update status: { "task_number": "ACT-42", "status": "done" } - Reassign: { "task_id": 123, "assignee": "Sarah" } - Unassign: { "task_id": 123, "assignee": null } - Update multiple: { "task_number": "ACT-42", "title": "New title", "status": "active", "deadline": "2024-11-15" } - Attach a metric: { "task_number": "ACT-42", "add_connections": [{ "type": "metric", "name": "Workload" }] } - Swap a discussion: { "task_id": 123, "add_connections": [{ "type": "discussion", "id": 88 }], "remove_connections": [{ "type": "discussion", "name": "Weekly sync" }] }
answer_structured_feedback
Claudecancel_calendar_event
Claudecreate_calendar_event
Claudediscussions_save
Claudedocuments_update_or_create
Claudeget_calendar_availability
Claudeget_discussion_templates
Claudeget_discussions
Claudeget_document_templates
Claudeget_documents
Claudeget_engagement_results
Claudeget_engagement_trend
Claudeget_feedback
Claudeget_feedback_requests
Claudeget_feedback_statistics
Claudeget_file
Claudeget_person_context
Claudeget_personal_engagement_answers
Claudeget_user_context
Claudeget_workspace_overview
Claudelist_questions
Claudelist_surveys
Clauderole_description_update
Claudesave_feedback_draft
Claudesave_question
Claudesave_survey
Claudesearch_users
Claudesend_praise
Claudesubmit_feedback
Claudetasks_list
Claudetasks_update_or_create
Claude