{"id":65516,"plugin_id":"plugin_asdk_app_6ac7200537dc819196816a1201ece845","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-27T06:07:37.400Z","digest":"60d9edf224acaa7060a331e8e9c99ff0fa436c1f864dfca2147c0ab304f33f52","against":null,"payload":{"description":"PropertyMe AiMe Connect MCP server — how to use its tools effectively as a property management assistant. Use this skill whenever the user mentions PropertyMe, property management, portfolios, properties, contacts, jobs, tasks, inspections, lease renewals, or team members in the context of the PropertyMe AiMe Connect MCP server. Covers domain terminology, tool workflows, presentation rules, and entity relationships. Trigger even if the user doesn't explicitly say \"MCP\" — most questions about their PropertyMe data need this guidance.","included_files":[],"name":"propertyme-mcp","skill_md_contents":"---\nname: propertyme-mcp\ndescription: >-\n  PropertyMe AiMe Connect MCP server — how to use its tools effectively as a property management assistant.\n  Use this skill whenever the user mentions PropertyMe, property management, portfolios,\n  properties, contacts, jobs, tasks, inspections, lease renewals, or team members in the context\n  of the PropertyMe AiMe Connect MCP server. Covers domain terminology, tool workflows, presentation rules,\n  and entity relationships. Trigger even if the user doesn't explicitly say \"MCP\" — most\n  questions about their PropertyMe data need this guidance.\n---\n\n# PropertyMe AiMe Connect MCP\n\nPropertyMe's AiMe Connect MCP server exposes property management data (properties, contacts, jobs, tasks,\ninspections, lease renewals, portfolios, team members) as tools that can be called. This skill\ncovers **using the tools well**.\n\n## Creating a session\n\nEvery session must start with `create_session`. It returns a `sessionId` that must be carried on\nevery subsequent tool call as the `Mcp-Param-SessionId` header. The session is created against\nthe user's default portfolio; call `set_portfolio` to switch to a different one.\n\n## Switching portfolios\n\nIf you belong to multiple property management businesses (portfolios), use `set_portfolio` to\nswitch the active context. All subsequent tool calls operate against the selected portfolio's\ndata. Check which is active with `list_portfolios` — the one with `IsCurrent = true` is active.\n\n## Domain glossary\n\nSpeak the user's language. Never use internal field names.\n\n| Term | What it means | Do not say |\n|---|---|---|\n| **Portfolio** | A property management agency or business entity | \"customer\" |\n| **Property** | A managed property (residential or commercial) | \"lot\" |\n| **Contact** | A person or organisation — owner, tenant, supplier, or agency | — |\n| **Job** | A maintenance or repair work order against a property | — |\n| **Task** | A to-do item (not a job — tasks are lighter, no supplier/access workflow) | — |\n| **Inspection** | A property inspection (Routine, Entry, Exit, or Open) | — |\n| **Lease renewal** | The workflow of renewing a tenancy agreement (owner + tenant sign-off) | — |\n| **Team member** | A staff user of the property management business (Admin, Standard, Limited, Read-only) | \"member\" alone |\n\n### Key workflows\n\n**1. Always verify the active portfolio first.**\n\nBefore querying data, confirm which portfolio the session is operating in. Call `list_portfolios`\nand check which one has `IsCurrent = true`. If the user names a specific portfolio, verify it's\nthe active one — if not, offer to switch with `set_portfolio`.\n\n**2. \"My\" queries — resolve the current user first.**\n\nWhen the user says \"my tasks,\" \"jobs assigned to me,\" or \"my inspections,\" call `get_current_user`\nfirst to get their `MemberId`, then match it against the `ManagerMemberId` field on the returned\nrecords.\n\n```\nUser: \"What jobs are assigned to me?\"\n  1. get_current_user  → MemberId = <guid>\n  2. list_jobs         → filter results where ManagerMemberId == MemberId\n  3. Present matching jobs (address, summary, priority, due date, status)\n```\n\n**3. Search before get.**\n\nMost list/search tools return summary records (id + key fields). Use search to find what the user\nis looking for, then `get_*` with the id for full details. Search returns max 2000 results — if\nthere are more, ask the user to refine their search. When the user wants a report (e.g. \"all\nproperties\", \"all jobs\"), use `list_*` and page through results instead of `search_*` — search is\nfor finding a specific record, not enumerating datasets.\n\n```\nUser: \"Show me the details for the Smith property\"\n  1. search_properties(\"Smith\") → get the property id\n  2. get_property(id)           → full details (address, bedrooms, bathrooms, etc.)\n```\n\n**4. Pagination.**\n\nAll list tools use `offset` (default 0) and `limit` (default 2000, maximum 2000). Page through by\nincrementing offset by 2000. If search returns exactly 2000 results, there may be more — suggest the\nuser narrow their search.\n\n**5. Offer to switch to a portfolio that supports MCP.**\n\nIf `list_portfolios` shows the user's active portfolio isn't MCP-enabled (MCP isn't available for\nit), or they belong to another MCP-enabled portfolio, offer to switch with `set_portfolio`. When\nrunning a report across multiple portfolios, do not switch to a portfolio that does not support\nMCP — only switch between MCP-enabled portfolios.\n\n### Key field connections\n\nThe following field connections are used internally (never displayed to the user):\n- `ManagerMemberId` on jobs and tasks → matches `MemberId` from `get_current_user` and `Id` from\n  `list_team_members` (the assigned team member)\n- `LotId` on jobs, tasks, and inspections → the property id (from `list_properties` / `get_property`)\n- `ContactId` → the contact id (from `list_contacts` / `search_contacts`)\n- `LotReference` on lease renewals → the property reference\n\n### Presentation rules\n\nThese are non-negotiable — the user should never see raw field names or internal identifiers.\n\n**Never show GUIDs.** Use ids internally to call follow-up tools, but present entities by name,\naddress, or reference to the user. If you must reference something, use its human-readable label.\n\n**Date format:** `dd/MM/yyyy` for dates (e.g. 11/12/2024), `dd/MM/yyyy HH:mm` for date-times.\n\n**Priority:** Show the label, never the number. Jobs use: Low, Medium, High, Urgent. Tasks use:\nLow, Medium, High (Urgent is jobs only — tasks only go to High).\n\n**Status translations:**\n| Internal | Show as |\n|---|---|\n| `inprogress` | \"in progress\" |\n| `ReScheduled` | \"rescheduled\" |\n| `ReadOnly` | \"read-only\" |\n| `todo` (lease renewals) | \"not started\" |\n| `pending` (lease renewals) | \"awaiting signatures\" |\n\n**Job lifecycle:** Reported → Quoted → Approved → Assigned → Finished → Closed (or Rejected/Cancelled).\n\n**Lease renewal workflow status:** todo (not started) → inprogress (being worked on) → pending\n(awaiting owner/tenant signatures) → closed (finished). `active` means everything not closed.\n\n**Lease renewal milestones:** The `States` list in a lease renewal tracks per-party progress\n(intent → agreed → signed) with dates. Use it to tell the user where each party is in the process\n— the top-level owner/tenant flags don't carry dates.\n\n### Common user requests and how to handle them\n\n| User says | Tools to call |\n|---|---|\n| \"What properties do we manage?\" | `list_properties` |\n| \"Show me the Smith property\" | `search_properties(\"Smith\")` → `get_property(id)` |\n| \"What jobs are assigned to me?\" | `get_current_user` → `list_jobs`, filter by ManagerMemberId |\n| \"What inspections are coming up?\" | `list_inspections` (filter by status if needed) |\n| \"Show me pending lease renewals\" | `list_lease_renewals(status=\"pending\")` |\n| \"Who's on the team?\" | `list_team_members` |\n| \"Switch to my other portfolio\" | `list_portfolios` → `set_portfolio(id)` |\n| \"What's the status of the lease renewal for 123 Main St?\" | `search_properties(\"123 Main\")` → `list_lease_renewals` → `get_lease_renewal(id)` |\n\n### Rate limiting\n\nThe server enforces rate limits. If you hit a rate limit error, \ntell the user and wait — don't retry immediately. Avoid unnecessary calls: prefer\n`search` over repeated `list` + manual filtering. When retrieving large amounts of data, batch\ncalls in groups of 5, then wait 5 seconds before issuing the next batch.\n\n### When MCP is not enabled for a portfolio\n\nIf `list_portfolios` shows no portfolios or the user's active portfolio isn't listed, MCP access\nhasn't been enabled for their account. Tell them to contact their PropertyMe administrator to\nenable MCP for their portfolio.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}