{"id":50697268,"url":"https://github.com/linuxfoundation/aaif-mcp-server","last_synced_at":"2026-06-09T07:30:39.566Z","repository":{"id":341672761,"uuid":"1169615926","full_name":"linuxfoundation/aaif-mcp-server","owner":"linuxfoundation","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-02T23:36:08.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-02T23:40:13.164Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/linuxfoundation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-01T00:11:05.000Z","updated_at":"2026-03-02T23:36:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/linuxfoundation/aaif-mcp-server","commit_stats":null,"previous_names":["linuxfoundation/aaif-mcp-server"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/linuxfoundation/aaif-mcp-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Faaif-mcp-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Faaif-mcp-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Faaif-mcp-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Faaif-mcp-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/linuxfoundation","download_url":"https://codeload.github.com/linuxfoundation/aaif-mcp-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Faaif-mcp-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34096950,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-09T07:30:38.079Z","updated_at":"2026-06-09T07:30:39.554Z","avatar_url":"https://github.com/linuxfoundation.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AAIF PMO Agent — MCP Server\n\n49 tools across 12 domains for automating Linux Foundation AAIF member onboarding — tier validation, compliance screening, mailing list provisioning, contact management, calendar scheduling, working group enrollment, elections, press releases, brand validation, renewal intelligence, and D1-D5 checklist orchestration.\n\nThe same MCP server powers multiple clients:\n\n| Client | Audience | How It Connects |\n|--------|----------|-----------------|\n| **LFX PCC** | PMO staff (day-to-day operations) | MCP client in the PCC operations dashboard |\n| **Cowork Plugin** | Executives \u0026 leadership (oversight, status, ad-hoc questions) | Drag-and-drop plugin for Claude Desktop's Cowork tab |\n| **Intercom Fin** | Members (self-service onboarding, FAQ) | MCP data connector for the member-facing chatbot |\n| **Goose** | Developers (optional) | Open-source MCP client for local development |\n\n\u003e **Sandbox Mode**: This server runs entirely on **mock data** by default. No backend credentials or API access needed to demo all 48 tools. Each connector auto-falls back to mock when its environment variables are unset.\n\n## Quick Start (5 minutes)\n\n### 1. Clone and install\n\n```bash\ngit clone git@github.com:linuxfoundation/aaif-mcp-server.git\ncd aaif-mcp-server\npip install -e \".[test]\"\n```\n\n### 2. Add to Claude Desktop\n\nOpen **Settings \u003e Developer \u003e Edit Config** in Claude Desktop, then add this to `mcpServers`:\n\n```json\n{\n  \"mcpServers\": {\n    \"aaif-onboarding\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"aaif_mcp_server.server\"],\n      \"cwd\": \"/path/to/aaif-mcp-server/src\"\n    }\n  }\n}\n```\n\n\u003e **Alternative** if you ran `pip install -e .`:\n\u003e ```json\n\u003e {\n\u003e   \"mcpServers\": {\n\u003e     \"aaif-onboarding\": {\n\u003e       \"command\": \"aaif-mcp-server\"\n\u003e     }\n\u003e   }\n\u003e }\n\u003e ```\n\n### 3. Restart Claude Desktop\n\nAfter restarting, you should see 49 tools available. The server runs against **mock data** by default — no credentials needed to test.\n\n## Verify it works\n\nIn Claude Desktop, try:\n\n- \"Validate Hitachi's membership tier\" → `validate_membership_tier`\n- \"List contacts for Bloomberg\" → `list_contacts`\n- \"Enroll Sam Altman in the Agentic Commerce working group\" → `enroll_in_working_group`\n- \"Check election status for Agentic Commerce chair\" → `get_election_status`\n- \"What's the churn risk for Natoma?\" → `predict_churn_risk`\n- \"Draft a press release for OpenAI joining AAIF\" → `draft_press_release`\n- \"Get the renewal dashboard\" → `get_renewal_dashboard`\n- \"Run the onboarding checklist for Sam Altman at OpenAI\" → `run_onboarding_checklist`\n\n## Run tests\n\n```bash\npytest tests/ -v\n# 176 tests pass (28 pre-existing failures in tests without registry init)\n```\n\n---\n\n## Tools (49 across 12 domains)\n\n### Domain 1: Mailing List Provisioning (4 tools)\n\n| Tool | Description |\n|---|---|\n| `provision_mailing_lists` | Add contact to tier-appropriate lists (dry_run default) |\n| `remove_from_mailing_lists` | Remove contact from all lists |\n| `check_mailing_list_membership` | Check subscription status |\n| `remediate_mailing_lists` | Find and fix list gaps foundation-wide |\n\n### Domain 2: Calendar \u0026 Meeting Management (3 tools)\n\n| Tool | Description |\n|---|---|\n| `provision_calendar_invites` | Send calendar invites based on tier/role |\n| `update_meeting_schedule` | Update WG recurring meeting time/link |\n| `get_upcoming_meetings` | Get upcoming meetings for a contact |\n\n### Domain 3: Compliance \u0026 Sanctions (4 tools)\n\n| Tool | Description |\n|---|---|\n| `check_sanctions` | Look up Descartes screening status in SFDC |\n| `check_tax_exempt_status` | Verify 501(c)(6) compliance |\n| `get_compliance_report` | Full compliance summary |\n| `flag_compliance_issue` | Create compliance ticket for human review |\n\n### Domain 4: Tier Validation (3 tools)\n\n| Tool | Description |\n|---|---|\n| `validate_membership_tier` | Look up org tier from SFDC |\n| `check_tier_entitlements` | Return entitlement matrix for a tier |\n| `detect_tier_anomalies` | Scan all members for access mismatches |\n\n### Domain 5: Contact Role Management (5 tools)\n\n| Tool | Description |\n|---|---|\n| `list_contacts` | List all contacts with roles and downstream access |\n| `add_contact` | Add contact, trigger downstream provisioning |\n| `update_contact_role` | Change role, show downstream effects |\n| `remove_contact` | Remove contact, trigger offboarding |\n| `transfer_voting_rights` | Transfer voting rights between contacts |\n\n### Domain 6: Working Group Enrollment (5 tools)\n\n| Tool | Description |\n|---|---|\n| `enroll_in_working_group` | Enroll across Groups.io + Discord + GitHub + Calendar |\n| `leave_working_group` | Remove from WG across all systems |\n| `list_available_working_groups` | List WGs with enrollment status |\n| `get_wg_members` | Get WG member roster |\n| `check_wg_eligibility` | Check tier/role eligibility for a WG |\n\n### Domain 7: Election \u0026 Voting Operations (5 tools)\n\n| Tool | Description |\n|---|---|\n| `create_election` | Create WG chair election in LFX Platform |\n| `validate_candidate_eligibility` | Check candidate prerequisites |\n| `check_voter_eligibility` | Check voting contact status |\n| `get_election_status` | Get election timeline, candidates, votes |\n| `diagnose_ballot_access` | Diagnose all blockers for ballot access |\n\n### Domain 8: Press Release Drafting (3 tools)\n\n| Tool | Description |\n|---|---|\n| `draft_press_release` | Generate press release from template + org data |\n| `get_press_release_status` | Check approval workflow progress |\n| `list_press_release_templates` | List available PR templates |\n\n### Domain 9: Logo \u0026 Brand Validation (3 tools)\n\n| Tool | Description |\n|---|---|\n| `validate_logo` | Validate logo against brand guidelines |\n| `get_brand_guidelines` | Retrieve brand specs and requirements |\n| `request_logo_upload` | Generate secure upload URL for logo submission |\n\n### Domain 10: Onboarding Call Scheduling (3 tools)\n\n| Tool | Description |\n|---|---|\n| `schedule_onboarding_call` | Schedule call with contacts and LF staff |\n| `reschedule_onboarding_call` | Reschedule an existing call |\n| `get_onboarding_call_status` | Check call status (scheduled/pending/done) |\n\n### Domain 11: Renewal \u0026 Engagement Intelligence (5 tools)\n\n| Tool | Description |\n|---|---|\n| `get_renewal_status` | Contract renewal timeline and stage |\n| `get_engagement_score` | Calculate engagement score (0-100) |\n| `predict_churn_risk` | Predict churn risk (0-100) |\n| `get_renewal_dashboard` | Foundation-wide renewal pipeline view |\n| `trigger_renewal_outreach` | Generate outreach plan with email template |\n\n### Domain 12: Orchestration (5 tools)\n\n| Tool | Description |\n|---|---|\n| `run_onboarding_checklist` | Execute D1-D5 onboarding flow |\n| `get_onboarding_status` | Check checklist progress |\n| `reconcile_silos` | Compare SFDC vs Groups.io vs SSO |\n| `run_offboarding_checklist` | Remove access on departure |\n| `get_silo_health` | Foundation-wide sync health score |\n\n---\n\n## API Access Required for Production\n\nThis server connects to **7 external systems**. In sandbox mode, all connectors auto-fall back to mock data when their environment variables are unset.\n\n### Connector Status\n\n| # | Connector | Service | Auth Type | Sandbox | Production |\n|---|-----------|---------|-----------|---------|------------|\n| 1 | **Salesforce** | CRM (accounts, contacts) | OAuth 2.0 | Mock | Implemented |\n| 2 | **Groups.io** | Mailing lists | Bearer token | Mock | Implemented |\n| 3 | **PIS Groups.io** | Mailing lists via LFX PIS | X-ACL header | Mock | Built (awaiting creds) |\n| 4 | **PIS Meeting** | LFX Meeting (Zoom-backed) | X-ACL header | Mock | Built (awaiting creds) |\n| 5 | **PIS GitHub** | GitHub org/repo tracking | X-ACL header | Mock | Built (read-only) |\n| 6 | **Google Calendar** | Meeting scheduling (legacy) | Service account JWT | Mock | Replaced by PIS Meeting |\n| 7 | **Discord** | Community channels/roles | Bot token | Mock | Stub |\n| 8 | **GitHub** | Repo collaborator access | PAT (Bearer) | Mock | Stub |\n| 9 | **LFX Platform** | LFID, elections, voting | API key | Mock | Stub |\n| 10 | **HubSpot** | Email templates, outreach | Private app key | Mock | Stub |\n\n### Environment Variables\n\n```bash\n# 0. PIS (Project Infrastructure Service) — X-ACL header auth\n#    API: V2 — Groups.io, LFX Meeting, GitHub connectors\n#    Used by: Mailing List Provisioning, Calendar/Meeting Mgmt, WG Enrollment, Offboarding\nPIS_ACL_TOKEN=\u003cx-acl-token-from-lf-sso-or-m2m\u003e\nPIS_USERNAME=\u003clfid-username\u003e\nPIS_PROJECT_ID=lfZA9uadMdkwBqqHsj\n\n# 1. Salesforce CRM — OAuth 2.0 username-password flow\n#    API: REST v59.0 — SOQL queries on Account, Contact objects\n#    Used by: Tier Validation, Compliance, Contact Roles, Orchestrator\nSFDC_INSTANCE_URL=https://aaif--sandbox.my.salesforce.com\nSFDC_CLIENT_ID=\u003cconnected-app-consumer-key\u003e\nSFDC_CLIENT_SECRET=\u003cconnected-app-consumer-secret\u003e\nSFDC_USERNAME=\u003capi-user-email\u003e\nSFDC_PASSWORD=\u003cpassword+security-token\u003e\n\n# 2. Groups.io — Bearer token\n#    API: v1 — directadd, removemember, getmembers, getgroups\n#    Used by: Mailing List Provisioning, WG Enrollment\nGROUPSIO_API_TOKEN=\u003cbearer-token\u003e\nGROUPSIO_ORG_ID=aaif\n\n# 3. Google Calendar — Service account JWT\n#    API: Calendar v3 — events.insert, events.list, events.patch, events.delete\n#    Used by: Calendar Management, Call Scheduling, WG Enrollment\nGOOGLE_CALENDAR_CREDENTIALS=\u003c/path/to/service-account.json\u003e\nGOOGLE_CALENDAR_ADMIN_EMAIL=\u003cadmin@linuxfoundation.org\u003e\n\n# 4. Discord — Bot token\n#    API: Bot API v10 — guild member roles, channel access\n#    Used by: WG Enrollment (channel/role provisioning)\nDISCORD_BOT_TOKEN=\u003cbot-token\u003e\nDISCORD_SERVER_ID=\u003cguild-id\u003e\n\n# 5. GitHub — Personal access token\n#    API: REST v3 — repos collaborators (add/remove/list)\n#    Used by: WG Enrollment (repo access)\nGITHUB_TOKEN=\u003cpat-with-repo-scope\u003e\nGITHUB_ORG=aaif\n\n# 6. LFX Platform — API key\n#    API: OpenProfile v1 — elections, LFID verification, ballots\n#    Used by: Elections \u0026 Voting, LFID checks\nLFX_API_URL=https://api.lfx.platform/v1\nLFX_API_KEY=\u003capi-key\u003e\n\n# 7. HubSpot — Private app API key\n#    API: v3 — transactional email, templates\n#    Used by: Press Release distribution, Renewal Outreach\nHUBSPOT_API_KEY=\u003cprivate-app-key\u003e\n```\n\n### API Operations by Connector\n\n**Salesforce** (REST v59.0):\n- `POST /services/oauth2/token` — authenticate\n- `GET /services/data/v59.0/query?q={SOQL}` — query accounts, contacts\n- Custom fields: `Membership_Tier__c`, `Membership_Status__c`, `Contract_Signed_Date__c`, `LFID__c`\n\n**Groups.io** (v1):\n- `POST /directadd` — add member to group\n- `POST /removemember` — remove member from group\n- `GET /getmembers` — list group members (paginated)\n- `GET /getmember` — check single membership\n\n**Google Calendar** (v3):\n- `POST /calendars/{id}/events` — create event/invite\n- `GET /calendars/{id}/events` — list events\n- `PATCH /calendars/{id}/events/{eventId}` — update event\n- `DELETE /calendars/{id}/events/{eventId}` — cancel event\n\n**Discord** (Bot API v10):\n- `PUT /guilds/{id}/members/{userId}/roles/{roleId}` — add role\n- `DELETE /guilds/{id}/members/{userId}/roles/{roleId}` — remove role\n- `GET /guilds/{id}/members` — list members\n\n**GitHub** (REST v3):\n- `PUT /repos/{owner}/{repo}/collaborators/{username}` — add collaborator\n- `DELETE /repos/{owner}/{repo}/collaborators/{username}` — remove collaborator\n- `GET /repos/{owner}/{repo}/collaborators` — list collaborators\n\n**LFX Platform** (v1):\n- `POST /elections` — create election\n- `GET /elections/{id}` — get election status\n- `GET /contacts/{id}/lfid` — verify LFID\n- `GET /elections/{id}/ballot/{contactId}` — check ballot status\n\n**HubSpot** (v3):\n- `POST /transactional/email` — send email from template\n- `GET /marketing/emails/templates` — list templates\n\n---\n\n## Architecture\n\n```\nsrc/aaif_mcp_server/\n├── server.py                  # MCP server (FastMCP) — registers 48 tools, 7 resources, 3 prompts\n├── config.py                  # Mock data + provisioning rules + checklist templates\n├── models.py                  # Pydantic models (MemberOrg, Contact, SanctionsResult, etc.)\n├── connectors/\n│   ├── base.py                # Abstract base classes (BaseConnector, BaseCRMConnector, etc.)\n│   ├── registry.py            # Connector registry (singleton init, env-var toggled PIS/mock)\n│   ├── pis_client.py          # Shared PIS HTTP client (X-ACL auth, retry, base URL)\n│   ├── pis_groupsio.py        # PIS Groups.io connector (mailing list CRUD via PIS V2)\n│   ├── pis_meeting.py         # PIS Meeting connector (LFX Meeting V2 / zoomV2 API)\n│   ├── pis_github.py          # PIS GitHub connector (org/repo tracking via PIS V2)\n│   ├── salesforce.py          # Salesforce REST API v59 (auto-falls back to mock)\n│   ├── groupsio.py            # Groups.io API v1 (legacy — auto-falls back to mock)\n│   ├── calendar.py            # Google Calendar API v3 (legacy — replaced by PIS Meeting)\n│   ├── discord.py             # Discord Bot API v10 (mock)\n│   ├── github_connector.py    # GitHub REST API v3 (mock)\n│   ├── lfx_platform.py        # LFX Platform / OpenProfile API (mock)\n│   └── hubspot.py             # HubSpot Marketing API (mock)\n├── tools/\n│   ├── tier_validation.py     # 3 tools: validate, entitlements, anomalies\n│   ├── compliance.py          # 4 tools: sanctions, tax-exempt, report, flag\n│   ├── mailing_list.py        # 4 tools: provision, remove, check, remediate\n│   ├── orchestrator.py        # 5 tools: onboard, status, reconcile, offboard, health\n│   ├── contact_roles.py       # 5 tools: list, add, update, remove, transfer\n│   ├── calendar.py            # 3 tools: provision invites, update schedule, upcoming\n│   ├── wg_enrollment.py       # 5 tools: enroll, leave, list, members, eligibility\n│   ├── call_scheduling.py     # 3 tools: schedule, reschedule, status\n│   ├── elections.py           # 5 tools: create, candidate, voter, status, diagnose\n│   ├── press_release.py       # 3 tools: draft, status, templates\n│   ├── logo_brand.py          # 3 tools: validate, guidelines, upload\n│   └── renewal_intelligence.py # 5 tools: renewal, engagement, churn, dashboard, outreach\n└── resources/\n    ├── member.py              # member:// resources (profiles, list)\n    ├── checklist.py           # checklist:// resources (D1-D5 templates)\n    └── rules.py               # rules:// resources (entitlements, provisioning, WGs)\n```\n\n## Mock Members (for testing)\n\n| Org | Tier | Contact(s) |\n|---|---|---|\n| Hitachi, Ltd. | Gold | Takeshi Yamada, Yuki Tanaka |\n| Bloomberg LP | Gold | Sambhav Kothari, Ania Musial |\n| Natoma | Silver | Paresh Bhaya |\n| iProov | Silver | Andrew Bud |\n| OpenAI | Platinum | Sam Altman |\n\n## License\n\nApache 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxfoundation%2Faaif-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinuxfoundation%2Faaif-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxfoundation%2Faaif-mcp-server/lists"}