@mailrith/agent-skill
Advanced tools
+7
-0
@@ -5,2 +5,9 @@ # Changelog | ||
| ## 1.0.0 - 2026-07-26 | ||
| - Replace the seven compact routing tools with the fixed submitted catalog of focused Mailrith tools. | ||
| - Keep Broadcast scheduling, sending, tests, cancellation, Sequence and Automation activation, and individual Subscriber targeting available as normal scoped workflows. | ||
| - Ask OpenAI API clients to approve non-read-only tools and rely on each host's confirmation behavior for consequential actions. | ||
| - Keep credentials and bulk import or export work in secure browser, CLI, SDK, or API workflows instead of passing sensitive files or secrets through agent context. | ||
| ## 0.2.0 - 2026-07-24 | ||
@@ -7,0 +14,0 @@ |
@@ -27,9 +27,54 @@ { | ||
| "configs": { | ||
| "mailrith_check_connection": { "enabled": true }, | ||
| "mailrith_search_operations": { "enabled": true }, | ||
| "mailrith_get_operation": { "enabled": true }, | ||
| "mailrith_read": { "enabled": true }, | ||
| "mailrith_write": { "enabled": true }, | ||
| "mailrith_delete": { "enabled": true }, | ||
| "mailrith_live": { "enabled": true } | ||
| "discovery_get_capabilities": { "enabled": true }, | ||
| "workspace_get": { "enabled": true }, | ||
| "sender_identities_list": { "enabled": true }, | ||
| "sender_identities_get": { "enabled": true }, | ||
| "analytics_create_report": { "enabled": true }, | ||
| "analytics_get_report": { "enabled": true }, | ||
| "subscribers_list": { "enabled": true }, | ||
| "subscribers_get": { "enabled": true }, | ||
| "subscribers_upsert": { "enabled": true }, | ||
| "subscribers_update": { "enabled": true }, | ||
| "subscribers_update_status": { "enabled": true }, | ||
| "subscribers_add_tag": { "enabled": true }, | ||
| "subscribers_remove_tag": { "enabled": true }, | ||
| "subscribers_add_to_sequence": { "enabled": true }, | ||
| "subscribers_remove_from_sequence": { "enabled": true }, | ||
| "tags_list": { "enabled": true }, | ||
| "tags_get": { "enabled": true }, | ||
| "segments_list": { "enabled": true }, | ||
| "segments_get": { "enabled": true }, | ||
| "segments_preview": { "enabled": true }, | ||
| "broadcasts_list": { "enabled": true }, | ||
| "broadcasts_create": { "enabled": true }, | ||
| "broadcasts_get": { "enabled": true }, | ||
| "broadcasts_update": { "enabled": true }, | ||
| "broadcasts_preflight": { "enabled": true }, | ||
| "broadcasts_send_test": { "enabled": true }, | ||
| "broadcasts_schedule": { "enabled": true }, | ||
| "broadcasts_unschedule": { "enabled": true }, | ||
| "broadcasts_send": { "enabled": true }, | ||
| "broadcasts_cancel": { "enabled": true }, | ||
| "broadcasts_get_send_progress": { "enabled": true }, | ||
| "sequences_list": { "enabled": true }, | ||
| "sequences_create": { "enabled": true }, | ||
| "sequences_get": { "enabled": true }, | ||
| "sequences_update": { "enabled": true }, | ||
| "sequences_preflight": { "enabled": true }, | ||
| "sequences_preview_journey": { "enabled": true }, | ||
| "sequences_send_test": { "enabled": true }, | ||
| "sequences_update_status": { "enabled": true }, | ||
| "automations_list": { "enabled": true }, | ||
| "automations_create": { "enabled": true }, | ||
| "automations_get": { "enabled": true }, | ||
| "automations_update": { "enabled": true }, | ||
| "automations_preflight": { "enabled": true }, | ||
| "automations_preview_journey": { "enabled": true }, | ||
| "automations_send_test": { "enabled": true }, | ||
| "automations_update_status": { "enabled": true }, | ||
| "email_templates_list": { "enabled": true }, | ||
| "email_templates_create": { "enabled": true }, | ||
| "email_templates_get": { "enabled": true }, | ||
| "email_templates_preview": { "enabled": true }, | ||
| "email_templates_update": { "enabled": true } | ||
| } | ||
@@ -36,0 +81,0 @@ } |
@@ -6,13 +6,57 @@ [mcp_servers.mailrith] | ||
| required = false | ||
| default_tools_approval_mode = "never" | ||
| startup_timeout_sec = 20 | ||
| tool_timeout_sec = 60 | ||
| enabled_tools = [ | ||
| "mailrith_check_connection", | ||
| "mailrith_search_operations", | ||
| "mailrith_get_operation", | ||
| "mailrith_read", | ||
| "mailrith_write", | ||
| "mailrith_delete", | ||
| "mailrith_live", | ||
| "discovery_get_capabilities", | ||
| "workspace_get", | ||
| "sender_identities_list", | ||
| "sender_identities_get", | ||
| "analytics_create_report", | ||
| "analytics_get_report", | ||
| "subscribers_list", | ||
| "subscribers_get", | ||
| "subscribers_upsert", | ||
| "subscribers_update", | ||
| "subscribers_update_status", | ||
| "subscribers_add_tag", | ||
| "subscribers_remove_tag", | ||
| "subscribers_add_to_sequence", | ||
| "subscribers_remove_from_sequence", | ||
| "tags_list", | ||
| "tags_get", | ||
| "segments_list", | ||
| "segments_get", | ||
| "segments_preview", | ||
| "broadcasts_list", | ||
| "broadcasts_create", | ||
| "broadcasts_get", | ||
| "broadcasts_update", | ||
| "broadcasts_preflight", | ||
| "broadcasts_send_test", | ||
| "broadcasts_schedule", | ||
| "broadcasts_unschedule", | ||
| "broadcasts_send", | ||
| "broadcasts_cancel", | ||
| "broadcasts_get_send_progress", | ||
| "sequences_list", | ||
| "sequences_create", | ||
| "sequences_get", | ||
| "sequences_update", | ||
| "sequences_preflight", | ||
| "sequences_preview_journey", | ||
| "sequences_send_test", | ||
| "sequences_update_status", | ||
| "automations_list", | ||
| "automations_create", | ||
| "automations_get", | ||
| "automations_update", | ||
| "automations_preflight", | ||
| "automations_preview_journey", | ||
| "automations_send_test", | ||
| "automations_update_status", | ||
| "email_templates_list", | ||
| "email_templates_create", | ||
| "email_templates_get", | ||
| "email_templates_preview", | ||
| "email_templates_update", | ||
| ] | ||
@@ -19,0 +63,0 @@ |
@@ -12,13 +12,62 @@ { | ||
| "allowed_tools": [ | ||
| "mailrith_check_connection", | ||
| "mailrith_search_operations", | ||
| "mailrith_get_operation", | ||
| "mailrith_read", | ||
| "mailrith_write", | ||
| "mailrith_delete", | ||
| "mailrith_live" | ||
| "discovery_get_capabilities", | ||
| "workspace_get", | ||
| "sender_identities_list", | ||
| "sender_identities_get", | ||
| "analytics_create_report", | ||
| "analytics_get_report", | ||
| "subscribers_list", | ||
| "subscribers_get", | ||
| "subscribers_upsert", | ||
| "subscribers_update", | ||
| "subscribers_update_status", | ||
| "subscribers_add_tag", | ||
| "subscribers_remove_tag", | ||
| "subscribers_add_to_sequence", | ||
| "subscribers_remove_from_sequence", | ||
| "tags_list", | ||
| "tags_get", | ||
| "segments_list", | ||
| "segments_get", | ||
| "segments_preview", | ||
| "broadcasts_list", | ||
| "broadcasts_create", | ||
| "broadcasts_get", | ||
| "broadcasts_update", | ||
| "broadcasts_preflight", | ||
| "broadcasts_send_test", | ||
| "broadcasts_schedule", | ||
| "broadcasts_unschedule", | ||
| "broadcasts_send", | ||
| "broadcasts_cancel", | ||
| "broadcasts_get_send_progress", | ||
| "sequences_list", | ||
| "sequences_create", | ||
| "sequences_get", | ||
| "sequences_update", | ||
| "sequences_preflight", | ||
| "sequences_preview_journey", | ||
| "sequences_send_test", | ||
| "sequences_update_status", | ||
| "automations_list", | ||
| "automations_create", | ||
| "automations_get", | ||
| "automations_update", | ||
| "automations_preflight", | ||
| "automations_preview_journey", | ||
| "automations_send_test", | ||
| "automations_update_status", | ||
| "email_templates_list", | ||
| "email_templates_create", | ||
| "email_templates_get", | ||
| "email_templates_preview", | ||
| "email_templates_update" | ||
| ], | ||
| "require_approval": "never" | ||
| "require_approval": { | ||
| "always": { | ||
| "read_only": false | ||
| } | ||
| } | ||
| } | ||
| ] | ||
| } |
@@ -7,7 +7,7 @@ # Mailrith Connector Templates | ||
| Resolve `${MAILRITH_ACCESS_TOKEN}` in server-side code before sending the request. The general-purpose template exposes all seven stable Mailrith MCP tools and uses the connection's approved Work Profile as the permission boundary. | ||
| Resolve `${MAILRITH_ACCESS_TOKEN}` in server-side code before sending the request. The general-purpose template exposes the fixed submitted Mailrith tools and asks for approval before non-read-only calls. | ||
| ## Claude | ||
| Resolve `${MAILRITH_ACCESS_TOKEN}` immediately before the Messages API request. The template enables all seven stable Mailrith MCP tools explicitly. Keep the current `mcp_toolset` structure; `tool_configuration` on the server is deprecated. | ||
| Resolve `${MAILRITH_ACCESS_TOKEN}` immediately before the Messages API request. The template enables the fixed submitted Mailrith tools explicitly. Keep the current `mcp_toolset` structure; `tool_configuration` on the server is deprecated. | ||
@@ -17,3 +17,3 @@ ## Codex | ||
| Merge `codex-config.toml` into the user's Codex `config.toml`, then run `codex mcp login mailrith`. For non-interactive use, configure `bearer_token_env_var` instead of saving a token in the file. | ||
| The template enables all seven stable Mailrith MCP tools. OAuth uses Full Email Marketing Access by default; choose a focused Work Profile when this Codex connection has a deliberately narrower job. | ||
| The template enables the fixed submitted Mailrith tools. OAuth uses Full Email Marketing Access by default; choose a focused Work Profile when this Codex connection has a deliberately narrower job. | ||
@@ -20,0 +20,0 @@ ## n8n |
@@ -12,3 +12,3 @@ # Mailrith Connection Guidance | ||
| During OAuth, use Full Email Marketing Access for a general-purpose agent so it can complete an email-marketing task without reconnecting for another public permission. Choose a focused Work Profile such as Reporting, Broadcasts, Sequences, or Email Delivery Setup only when the connection has a deliberately narrower job. The same server URL works for every purpose. The hosted server exposes `mailrith_check_connection`, `mailrith_search_operations`, `mailrith_get_operation`, `mailrith_read`, `mailrith_write`, `mailrith_delete`, and `mailrith_live`. Search the compact operation catalog first and load one exact schema only when needed. If search marks several choices as ambiguous, narrow the task before running one. | ||
| Start an MCP connection with `discovery_get_capabilities`. Its OAuth prompt can show every Work Profile and defaults a general-purpose agent to Full Email Marketing Access so it can complete an email-marketing task without reconnecting for another public permission. Choose a focused Work Profile such as Reporting, Broadcasts, Sequences, or Email Delivery Setup only when the connection has a deliberately narrower job. After OAuth, call `discovery_get_capabilities` again to confirm the selected workspace and exact granted permissions. The same server URL works for every purpose. The hosted server exposes the fixed submitted catalog of focused tools. Then use the exact Subscriber, Broadcast, Sequence, Automation, reporting, sender, targeting, or Template tool that matches the task. | ||
@@ -15,0 +15,0 @@ When Mailrith returns `insufficient_scope`, use the returned access-update link and recommended Work Profile, then reconnect from the agent client and approve the listed missing permissions. An existing OAuth token cannot gain permissions silently. |
@@ -13,6 +13,6 @@ # Mailrith Workflow Recipes | ||
| 1. Inspect custom fields and Tags before mapping incoming fields. | ||
| 1. Read the Subscriber and inspect available Tags or Sequences before changing targeting. | ||
| 2. Separate profile updates from sending-eligibility or targeting changes. | ||
| 3. Use the Subscriber upsert operation for one record. | ||
| 4. For a CSV, start a Subscriber import upload and give the short-lived browser link to the signed-in user. Do not ask the user to send the CSV through the chat or agent. | ||
| 3. Use `subscribers_upsert` for one record. Use `subscribers_update_status`, `subscribers_add_tag`, `subscribers_remove_tag`, `subscribers_add_to_sequence`, or `subscribers_remove_from_sequence` only for the matching explicit request. | ||
| 4. For a CSV, use the Mailrith UI or CLI import workflow and give any short-lived browser link to the signed-in user. Do not ask the user to send the CSV through the chat or agent. | ||
| 5. Poll the upload at a bounded interval. After it is ready, inspect only its column names and row count, map the columns, and start the import with its upload ID. | ||
@@ -25,7 +25,7 @@ 6. Confirm the intended eligibility, targeting, or Sequence-enrollment change before calling the scoped mutation. | ||
| 1. Run `mailrith_check_connection` for `createBroadcast`. If Mailrith reports that email delivery is missing or disabled, give the returned setup link to the user or ask them to enable the existing connection. | ||
| 2. Use `mailrith_search_operations` to find `listSenderIdentities`, targeting reads, and Template reads. Load each required schema with `mailrith_get_operation`, then run it with `mailrith_read`. | ||
| 3. Find `createBroadcast` or `updateBroadcast`, load its schema, and run it with `mailrith_write`. Keep the Broadcast as a draft. | ||
| 1. Run `discovery_get_capabilities`. If Mailrith reports that email delivery is missing or disabled, give the returned setup link to the user or ask them to enable the existing connection. | ||
| 2. Use `sender_identities_list`, the relevant targeting reads, and `email_templates_list` or `email_templates_get` to choose saved resources. | ||
| 3. Run `broadcasts_create` or `broadcasts_update`. Keep the Broadcast as a draft. | ||
| 4. Confirm subject, sender, recipients, exclusions, and unsubscribe behavior. | ||
| 5. Run `preflightBroadcast` with `mailrith_read`. The Broadcasts Work Profile authorizes sending, but creating or updating a draft does not send it. Run `sendBroadcast` with `mailrith_live` only when the user's task requires a live send. | ||
| 5. Run `broadcasts_preflight`. Creating or updating a draft does not send it. Run `broadcasts_send_test`, `broadcasts_schedule`, or `broadcasts_send` only when the user's task requires that separate action. | ||
@@ -36,8 +36,8 @@ ## Email Delivery Setup | ||
| 2. Ask which email delivery provider and sender identity the user wants. Do not ask for an API key, password, secret, or SMTP credential. | ||
| 3. Find `startEmailDeliveryConnectionSetup`, load its schema, and run it with `mailrith_write`. Include the provider, connection name, From name, and From email. For credential replacement, provide the existing connection ID and use the replacement purpose. | ||
| 3. Open the setup link returned by Mailrith or use the Email Delivery Setup workflow in the Mailrith UI or CLI. Include the provider, connection name, From name, and From email. For credential replacement, choose the existing connection and the replacement purpose. | ||
| 4. Give the returned short-lived setup link to the authorized user. The user signs in to Mailrith and enters provider credentials there; the credentials never pass through the agent. After the link opens, Mailrith keeps the setup in a browser-bound secure session so a reload does not require a new agent link. | ||
| 5. Run `getEmailDeliveryConnectionSetup` with `mailrith_read` at a bounded interval until it is completed or `expires_at` has passed. Do not poll rapidly or repeatedly create new setup sessions. | ||
| 5. Check setup status at a bounded interval until it is completed or `expires_at` has passed. Do not poll rapidly or repeatedly create new setup sessions. | ||
| 6. Read the completed connection and confirm its provider, From name, From email, and enabled status. Saved credentials are never returned. | ||
| 7. Run `verifyEmailDeliveryConnection` with `mailrith_read` to check provider and sender access. If inspection is unavailable for a send-only provider key, explain that a real test email is still required. | ||
| 8. With the user's chosen recipient and a stable idempotency key, run `testEmailDeliveryConnection` with `mailrith_live`. Confirm the successful result before preparing email-dependent resources. | ||
| 7. Verify provider and sender access in Mailrith. If inspection is unavailable for a send-only provider key, explain that a real test email is still required. | ||
| 8. Send a test from the Mailrith setup workflow to the user's chosen recipient. Confirm the successful result before preparing email-dependent resources. | ||
| 9. If the provider requires DNS, domain, or sender verification, tell the user what remains to be completed in the provider account before sending. | ||
@@ -48,16 +48,24 @@ | ||
| 1. Read the Broadcast and confirm its sender, Subscriber filters, exclusions, subject, and content. | ||
| 2. Find `scheduleBroadcast`, load its schema, and run it with `mailrith_live` using a future date and time that includes a UTC offset. | ||
| 2. Run `broadcasts_schedule` using a future date and time that includes a UTC offset. | ||
| 3. Call the same operation with a new date and time to reschedule it. | ||
| 4. Run `unscheduleBroadcast` with `mailrith_live` to return a scheduled Broadcast to Draft. | ||
| 4. Run `broadcasts_unschedule` to return a scheduled Broadcast to Draft. | ||
| 5. Read the Broadcast after each change and confirm `status`, `scheduled_at`, and `recipient_count`. | ||
| ## Sequences And Operations | ||
| ## Sequences | ||
| 1. Use Sequences to create, read, change, or delete paused Sequences. | ||
| 1. Use `sequences_create` or `sequences_update` to save a complete draft definition. | ||
| 2. Read sender settings, steps, delays, and current Subscriber count before activation. | ||
| 3. Select a saved Subscriber and preview that Subscriber's eligibility and personalized email journey. | ||
| 4. Use the Sequences Work Profile to activate, pause, or change individual Subscriber enrollment. | ||
| 3. Select a saved Subscriber and run `sequences_preflight` and `sequences_preview_journey`. | ||
| 4. Run `sequences_update_status` to activate or pause. Use the focused Subscriber Sequence tools to change one enrollment. | ||
| 5. Treat activation and enrollment as live email operations. | ||
| 6. Confirm the saved status and Subscriber count after each operation. | ||
| ## Automations | ||
| 1. Use `automations_create` or `automations_update` to save a complete inactive definition. | ||
| 2. Run `automations_preflight` and `automations_preview_journey` before activation. | ||
| 3. Use `automations_send_test` only for the user's explicit test address. | ||
| 4. Run `automations_update_status` as a separate live action to activate, pause, or deactivate. | ||
| 5. Read the Automation after the change and report its saved status. | ||
| ## Personalized Previews And Tests | ||
@@ -64,0 +72,0 @@ |
@@ -12,3 +12,3 @@ --- | ||
| 1. Read discovery and capabilities before assuming an operation exists. | ||
| 1. Read the connected workspace and capabilities before assuming an action is available. | ||
| 2. Confirm the selected workspace, credential identity, and granted scopes. | ||
@@ -30,3 +30,3 @@ 3. Convert the user's request into the smallest sequence of Mailrith operations. | ||
| Run `mailrith capabilities --json` or `mailrith_check_connection` after authentication. In MCP, use `mailrith_search_operations`, load one exact schema with `mailrith_get_operation`, then call the matching read, write, delete, or live tool. In the CLI, use `mailrith operations search "<task>" --json` and `mailrith operations describe <operation-id> --json` before calling an unfamiliar operation. CLI search and schema inspection work before authentication and do not make a network request. If operation search marks the result as ambiguous, narrow the request or ask the user which effect they intend before executing anything. Do not hard-code undocumented paths, permissions, operation IDs, enum values, or retry rules. | ||
| For an MCP connection, call `discovery_get_capabilities` first. If the client asks the user to connect, finish OAuth, choose the appropriate Work Profile, and call it again to confirm the selected workspace and granted permissions. Run `mailrith capabilities --json` before using the CLI. Then choose the focused tool whose name and schema match the requested action. Keep draft editing, preflight, testing, activation, scheduling, and sending as separate calls. In the CLI, use `mailrith operations search "<task>" --json` and `mailrith operations describe <operation-id> --json` before calling an unfamiliar operation. CLI search and schema inspection work before authentication and do not make a network request. If several operations could produce different effects, narrow the request or ask the user which effect they intend before executing anything. Do not hard-code undocumented paths, permissions, operation IDs, enum values, or retry rules. | ||
@@ -33,0 +33,0 @@ ## Respect Authorization Boundaries |
+2
-2
| { | ||
| "name": "@mailrith/agent-skill", | ||
| "version": "0.2.0", | ||
| "version": "1.0.0", | ||
| "description": "Installable Mailrith skill for safe AI agent email marketing workflows.", | ||
@@ -33,3 +33,3 @@ "license": "MIT", | ||
| "devDependencies": { | ||
| "@mailrith/sdk": "^0.2.0" | ||
| "@mailrith/sdk": "^1.0.0" | ||
| }, | ||
@@ -36,0 +36,0 @@ "scripts": { |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
37813
19.2%370
34.06%0
-100%