skyp claude skill.md

Skyp MCP Skill Guide

You are working with the Skyp MCP server — an email and LinkedIn campaign management platform that lets you create, manage, and analyze outreach campaigns programmatically.

Authentication

All tools require authentication via an API key passed in the MCP client config. If a tool returns an authentication error, the user needs to check their API key in Settings > API Keys on the Skyp dashboard.

Campaign Lifecycle

Campaigns follow a strict lifecycle. Always follow this order:

  1. Create the campaign (create_new_campaign)
  2. Add contacts (add_contact_to_existing_campaign)
  3. Generate a strategy (generate_campaign_strategy) — this creates the sequence plan with timing and focus for each email
  4. Review the strategy (get_strategy) — present it to the user before proceeding
  5. Finalize (finalize_campaign) — this triggers AI message generation for all contacts and cannot be undone

Never finalize a campaign without contacts and a strategy. The campaign must have both before finalization will succeed.

Tool Reference

Campaigns

Strategy

Contacts

Analytics

LinkedIn Campaigns

Recommended Patterns

Before taking action, discover first

Always call list_campaigns or list_contacts before operating on a specific item. Use the returned IDs for subsequent calls. Never guess or hardcode IDs.

Use context for better personalization

When creating contacts, populate the context field with relevant details (recent achievements, shared connections, mutual interests). This is what the AI uses to personalize emails.

Batch contact additions

When adding multiple contacts to a campaign, call add_contact_to_existing_campaign for each one. There is no bulk endpoint — but each call is fast and will create the contact if it doesn't exist.

Present strategy before finalizing

After generate_campaign_strategy, always retrieve and present the strategy to the user with get_strategy. Let them review the sequence plan (timing, focus areas, CTAs) before calling finalize_campaign. Finalization generates all emails and cannot be reversed.

Interpreting analytics

Pagination

List endpoints support skip and limit parameters (default limit: 50). For large datasets, paginate by incrementing skip. The total field in responses tells you the full count.

Common Workflows

Full campaign setup

1. create_new_campaign(name="Q2 Outreach", description="Target Series A founders", touches=3, tone=["friendly", "concise"])
2. add_contact_to_existing_campaign(campaign_id, email="jane@acme.co", first_name="Jane", ...)  // repeat for each contact
3. generate_campaign_strategy(campaign_id)
4. get_strategy(campaign_id)  // present to user for review
5. finalize_campaign(campaign_id)  // only after user confirms

Morning briefing

1. get_account_analytics()  // overview metrics
2. list_campaigns()  // find active campaigns
3. get_campaign_threads(campaign_id)  // check for new replies on each active campaign

Contact research and outreach

1. list_contacts()  // see existing contacts
2. create_new_contact(email, first_name, ..., context="Recently raised Series A, expanding engineering team")
3. add_contact_to_existing_campaign(campaign_id, email)  // add to relevant campaign

Editing an evergreen campaign

Evergreen campaigns are config-locked. To make changes, pause first, then resume:

1. pause_email_campaign(campaign_id)  // pauses the campaign, saves "evergreen" as previous status
2. update_existing_campaign(campaign_id, max_words=120, tone=["direct"])  // now editable
3. resume_email_campaign(campaign_id)  // restores to evergreen status automatically

LinkedIn campaign setup

1. create_linkedin_campaign(linkedin_session_id, name="Q2 LinkedIn Outreach", followup_message="Hi {name}, thanks for connecting! ...", connection_note="Hi, I'd love to connect...")
2. add_linkedin_leads(campaign_id, leads=[{linkedin_url: "https://linkedin.com/in/janedoe", first_name: "Jane", company: "Acme"}])
3. activate_linkedin_campaign(campaign_id)  // starts automated connection requests

LinkedIn campaign monitoring

1. list_linkedin_campaigns()  // see all campaigns with funnel stats
2. list_linkedin_leads(campaign_id, status_filter="replied")  // check who replied
3. list_linkedin_leads(campaign_id, status_filter="invite_failed")  // check for failures

LinkedIn Campaign Lifecycle

LinkedIn campaigns follow a different lifecycle than email campaigns:

  1. Create the campaign (create_linkedin_campaign) — requires a LinkedIn session ID (set up via the dashboard)
  2. Add leads (add_linkedin_leads) — bulk add LinkedIn profile URLs
  3. Activate (activate_linkedin_campaign) — starts the automation:
    • Connection requests are sent automatically every 2 hours during sending hours (weekdays by default)
    • Followup messages are sent at 9:30am and 2:30pm to leads whose connections were accepted
  4. Monitor (list_linkedin_leads) — track the funnel: pending → invite_sent → message_sent → replied
  5. Pause/Resume (pause_linkedin_campaign / activate_linkedin_campaign) — pause and resume as needed

LinkedIn sessions (the li_at cookie) must be configured through the Skyp dashboard — they are not managed via MCP tools for security reasons.

Error Handling

Important Constraints