Add mcporter skills for Glean, Datadog, and Granola
Assisted-by: Claude Opus 4.6 via Claude Code
diff --git a/ai/skills/datadog-mcporter/SKILL.md b/ai/skills/datadog-mcporter/SKILL.md
new file mode 100644
index 00000000..3445b58b
--- /dev/null
+++ b/ai/skills/datadog-mcporter/SKILL.md
@@ -0,0 +1,64 @@
+---
+name: datadog-mcporter
+description: Use when searching Datadog logs, metrics, traces, spans, dashboards, monitors, incidents, events, notebooks, services, hosts, or RUM events via mcporter CLI.
+---
+
+# Datadog
+
+Observability and monitoring via mcporter. Prefix all calls with
+`datadog.`. Run `mcporter list datadog --schema` for full tool details.
+
+*This is a self-improving skill — see the `self-improving-skills` skill.*
+
+## Tools
+
+| Tool | Purpose |
+|------|---------|
+| `search_datadog_logs` | Raw log entries, pattern discovery, attribute exploration |
+| `analyze_datadog_logs` | SQL analytics against logs (counts, group-by, aggregations) |
+| `search_datadog_metrics` | List available metrics with optional filtering |
+| `get_datadog_metric` | Fetch timeseries data for one or more metric queries |
+| `get_datadog_metric_context` | Metadata, tags, and related assets for a metric |
+| `search_datadog_spans` | Raw span inspection and attribute discovery |
+| `aggregate_spans` | Aggregated span analysis (counts, averages, grouped) |
+| `get_datadog_trace` | Fetch all spans in a specific trace by trace ID |
+| `search_datadog_events` | Raw event inspection (titles, messages, tags) |
+| `aggregate_events` | Aggregated event analysis (counts, sums, grouped) |
+| `search_datadog_dashboards` | Find dashboards by title, metric, team, or author |
+| `search_datadog_notebooks` | Find notebooks by keyword, author, or type |
+| `get_datadog_notebook` | Fetch a full notebook by ID or URL |
+| `create_datadog_notebook` | Create a notebook with markdown, metric, and log cells |
+| `edit_datadog_notebook` | Edit or append to an existing notebook |
+| `search_datadog_monitors` | Find monitors by title, status, team, or tag |
+| `search_datadog_incidents` | Search incidents by state, severity, team |
+| `get_datadog_incident` | Detailed incident info including timeline |
+| `search_datadog_services` | List services by name or team |
+| `search_datadog_service_dependencies` | Upstream/downstream service dependency graph |
+| `search_datadog_hosts` | SQL queries against the hosts inventory |
+| `search_datadog_rum_events` | Raw RUM event inspection |
+| `aggregate_rum_events` | Aggregated RUM analysis |
+| `check_datadog_mcp_setup` | Diagnose permission issues |
+
+## Search vs. aggregate
+
+Logs, events, spans, and RUM each have a `search_*` and an
+`aggregate_*` tool. Use search first to inspect raw data and discover
+fields, then aggregate for counts and summaries. Never use search
+tools for counting or aggregation.
+
+## DDSQL
+
+`analyze_datadog_logs` and `search_datadog_hosts` run DDSQL, a
+PostgreSQL subset. Key restrictions: non-aggregated SELECT columns
+must appear in GROUP BY, SELECT aliases cannot be reused in
+WHERE/GROUP BY/HAVING (repeat the expression), and column names with
+`@` need quoting. No `ANY()`, `->>`, or `current_timestamp`.
+
+## Gotchas
+
+`search_datadog_service_dependencies`: supply either `service` or
+`team`, not both. When using `service`, you must also set `direction`
+to `upstream` or `downstream`.
+
+Relative time values must start with `now-` (for `from`) or `now` (for
+`to`). Defaults vary by tool.
diff --git a/ai/skills/glean-mcporter/SKILL.md b/ai/skills/glean-mcporter/SKILL.md
new file mode 100644
index 00000000..9f412c5b
--- /dev/null
+++ b/ai/skills/glean-mcporter/SKILL.md
@@ -0,0 +1,47 @@
+---
+name: glean-mcporter
+description: Use when searching company knowledge, looking up documents, finding employees, searching code, checking Gmail, looking up meetings, reading URLs, checking user activity, or querying Glean memory via mcporter CLI.
+---
+
+# Glean
+
+Company knowledge search via mcporter. Prefix all calls with `glean.`.
+Run `mcporter list glean --schema` for full tool details.
+
+*This is a self-improving skill — see the `self-improving-skills` skill.*
+
+## Tools
+
+| Tool | Purpose |
+|------|---------|
+| `search` | Primary tool for finding documents across all company apps |
+| `chat` | AI-powered synthesis for complex questions needing analysis across sources |
+| `code_search` | Search internal company code repos and private commits |
+| `employee_search` | Find people by name, team, role, or reporting chain |
+| `gmail_search` | Search Gmail inbox for emails, threads, and attachments |
+| `meeting_lookup` | Search calendar meetings and extract transcripts |
+| `read_document` | Fetch full content of one or more URLs (internal or external) |
+| `read_memory` | Access the user's long-term work memories and personalization |
+| `user_activity` | Retrieve document activity within a date range (`start_date` inclusive, `end_date` exclusive) |
+
+## Search
+
+Use `search` for keyword document retrieval, `chat` for interpretation
+and synthesis. When in doubt, start with `search`.
+
+Queries must be short, targeted keywords — not full sentences. No
+boolean logic (OR/AND), no synonyms, no query stuffing. Do not use
+date filters when the user says "latest" without a specific timeframe.
+
+## Gotchas
+
+`employee_search`: the `reportsto:` filter finds direct reports *of* a
+person — do not use it to find who someone reports *to*.
+
+`meeting_lookup`: time ranges are non-inclusive. To include all
+meetings on a date, add buffer days (`after:2026-04-06
+before:2026-04-08` for April 7). Date math uses no spaces:
+`today-1d`, `now-2w`. Spaced expressions do not work.
+
+`read_document`: results are all-or-nothing per URL. Do not retry the
+same URL — results will be identical.
diff --git a/ai/skills/granola-mcporter/SKILL.md b/ai/skills/granola-mcporter/SKILL.md
new file mode 100644
index 00000000..c51bb1a7
--- /dev/null
+++ b/ai/skills/granola-mcporter/SKILL.md
@@ -0,0 +1,34 @@
+---
+name: granola-mcporter
+description: Use when querying meeting notes, listing meetings, getting meeting details or transcripts, or browsing meeting folders via Granola and mcporter CLI.
+---
+
+# Granola
+
+Meeting notes and transcripts via mcporter. Prefix all calls with
+`granola.`. Run `mcporter list granola --schema` for full tool details.
+
+*This is a self-improving skill — see the `self-improving-skills` skill.*
+
+## Tools
+
+| Tool | Purpose |
+|------|---------|
+| `query_granola_meetings` | Natural language queries about meeting content — the primary tool |
+| `list_meetings` | List meetings within a time range, optionally filtered by folder |
+| `get_meetings` | Fetch detailed info for specific meetings by ID (max 10) |
+| `get_meeting_transcript` | Fetch the verbatim transcript for a single meeting |
+| `list_meeting_folders` | List all folders with their IDs and note counts |
+
+## Choosing the right tool
+
+Start with `query_granola_meetings` for open-ended questions about
+what was discussed, decided, or assigned. Use `list_meetings` +
+`get_meetings` when you need structured metadata or browsing by date.
+Use `get_meeting_transcript` only for exact quotes.
+
+## Citations
+
+`query_granola_meetings` returns inline citation links
+(`[[0]](url)`) that reference source meeting notes. Always preserve
+these in your output so the user can verify.