theleadrouter-mcp 0.1.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/admin-guide/SKILL.md +42 -0
- package/.claude/skills/buyer-guide/SKILL.md +40 -0
- package/.claude/skills/partner-guide/SKILL.md +72 -1
- package/.claude/skills/welcome/SKILL.md +10 -7
- package/CLAUDE.md +5 -5
- package/README.md +136 -4
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +122 -6
- package/dist/index.js.map +1 -1
- package/dist/sensitive-tools.d.ts +9 -0
- package/dist/sensitive-tools.d.ts.map +1 -0
- package/dist/sensitive-tools.js +58 -0
- package/dist/sensitive-tools.js.map +1 -0
- package/dist/tools/composite.js +2 -2
- package/dist/tools/composite.js.map +1 -1
- package/dist/tools/generated/agent-connect.gen.d.ts +3 -0
- package/dist/tools/generated/agent-connect.gen.d.ts.map +1 -0
- package/dist/tools/generated/agent-connect.gen.js +410 -0
- package/dist/tools/generated/agent-connect.gen.js.map +1 -0
- package/dist/tools/generated/ai-dialer.gen.d.ts +3 -0
- package/dist/tools/generated/ai-dialer.gen.d.ts.map +1 -0
- package/dist/tools/generated/ai-dialer.gen.js +410 -0
- package/dist/tools/generated/ai-dialer.gen.js.map +1 -0
- package/dist/tools/generated/alerts.gen.d.ts +3 -0
- package/dist/tools/generated/alerts.gen.d.ts.map +1 -0
- package/dist/tools/generated/alerts.gen.js +87 -0
- package/dist/tools/generated/alerts.gen.js.map +1 -0
- package/dist/tools/generated/api-keys.gen.js +3 -3
- package/dist/tools/generated/api-keys.gen.js.map +1 -1
- package/dist/tools/generated/approvals.gen.d.ts +3 -0
- package/dist/tools/generated/approvals.gen.d.ts.map +1 -0
- package/dist/tools/generated/approvals.gen.js +66 -0
- package/dist/tools/generated/approvals.gen.js.map +1 -0
- package/dist/tools/generated/audit-logs.gen.d.ts.map +1 -1
- package/dist/tools/generated/audit-logs.gen.js +51 -16
- package/dist/tools/generated/audit-logs.gen.js.map +1 -1
- package/dist/tools/generated/auth.gen.d.ts.map +1 -1
- package/dist/tools/generated/auth.gen.js +244 -44
- package/dist/tools/generated/auth.gen.js.map +1 -1
- package/dist/tools/generated/bid-signals.gen.d.ts +3 -0
- package/dist/tools/generated/bid-signals.gen.d.ts.map +1 -0
- package/dist/tools/generated/bid-signals.gen.js +24 -0
- package/dist/tools/generated/bid-signals.gen.js.map +1 -0
- package/dist/tools/generated/billing.gen.d.ts +3 -0
- package/dist/tools/generated/billing.gen.d.ts.map +1 -0
- package/dist/tools/generated/billing.gen.js +168 -0
- package/dist/tools/generated/billing.gen.js.map +1 -0
- package/dist/tools/generated/blocked-lists.gen.d.ts.map +1 -1
- package/dist/tools/generated/blocked-lists.gen.js +24 -20
- package/dist/tools/generated/blocked-lists.gen.js.map +1 -1
- package/dist/tools/generated/buyer-skus.gen.d.ts +3 -0
- package/dist/tools/generated/buyer-skus.gen.d.ts.map +1 -0
- package/dist/tools/generated/buyer-skus.gen.js +323 -0
- package/dist/tools/generated/buyer-skus.gen.js.map +1 -0
- package/dist/tools/generated/buyers.gen.d.ts.map +1 -1
- package/dist/tools/generated/buyers.gen.js +217 -22
- package/dist/tools/generated/buyers.gen.js.map +1 -1
- package/dist/tools/generated/call-billing-rules.gen.d.ts +3 -0
- package/dist/tools/generated/call-billing-rules.gen.d.ts.map +1 -0
- package/dist/tools/generated/call-billing-rules.gen.js +143 -0
- package/dist/tools/generated/call-billing-rules.gen.js.map +1 -0
- package/dist/tools/generated/calls.gen.d.ts.map +1 -1
- package/dist/tools/generated/calls.gen.js +581 -39
- package/dist/tools/generated/calls.gen.js.map +1 -1
- package/dist/tools/generated/campaigns.gen.d.ts.map +1 -1
- package/dist/tools/generated/campaigns.gen.js +664 -100
- package/dist/tools/generated/campaigns.gen.js.map +1 -1
- package/dist/tools/generated/catalog.json +16462 -3462
- package/dist/tools/generated/compliance.gen.d.ts.map +1 -1
- package/dist/tools/generated/compliance.gen.js +116 -23
- package/dist/tools/generated/compliance.gen.js.map +1 -1
- package/dist/tools/generated/consent-certificates.gen.d.ts +3 -0
- package/dist/tools/generated/consent-certificates.gen.d.ts.map +1 -0
- package/dist/tools/generated/consent-certificates.gen.js +135 -0
- package/dist/tools/generated/consent-certificates.gen.js.map +1 -0
- package/dist/tools/generated/consent.gen.d.ts.map +1 -1
- package/dist/tools/generated/consent.gen.js +15 -13
- package/dist/tools/generated/consent.gen.js.map +1 -1
- package/dist/tools/generated/contacts.gen.d.ts.map +1 -1
- package/dist/tools/generated/contacts.gen.js +114 -19
- package/dist/tools/generated/contacts.gen.js.map +1 -1
- package/dist/tools/generated/contracts.gen.d.ts.map +1 -1
- package/dist/tools/generated/contracts.gen.js +575 -159
- package/dist/tools/generated/contracts.gen.js.map +1 -1
- package/dist/tools/generated/coupons.gen.d.ts +3 -0
- package/dist/tools/generated/coupons.gen.d.ts.map +1 -0
- package/dist/tools/generated/coupons.gen.js +139 -0
- package/dist/tools/generated/coupons.gen.js.map +1 -0
- package/dist/tools/generated/credits.gen.d.ts +3 -0
- package/dist/tools/generated/credits.gen.d.ts.map +1 -0
- package/dist/tools/generated/credits.gen.js +399 -0
- package/dist/tools/generated/credits.gen.js.map +1 -0
- package/dist/tools/generated/dedup.gen.d.ts +3 -0
- package/dist/tools/generated/dedup.gen.d.ts.map +1 -0
- package/dist/tools/generated/dedup.gen.js +28 -0
- package/dist/tools/generated/dedup.gen.js.map +1 -0
- package/dist/tools/generated/delivery-log.gen.d.ts +3 -0
- package/dist/tools/generated/delivery-log.gen.d.ts.map +1 -0
- package/dist/tools/generated/delivery-log.gen.js +167 -0
- package/dist/tools/generated/delivery-log.gen.js.map +1 -0
- package/dist/tools/generated/delivery-test.gen.d.ts.map +1 -1
- package/dist/tools/generated/delivery-test.gen.js +69 -2
- package/dist/tools/generated/delivery-test.gen.js.map +1 -1
- package/dist/tools/generated/delivery.gen.d.ts +3 -0
- package/dist/tools/generated/delivery.gen.d.ts.map +1 -0
- package/dist/tools/generated/delivery.gen.js +88 -0
- package/dist/tools/generated/delivery.gen.js.map +1 -0
- package/dist/tools/generated/discovery.gen.js +1 -1
- package/dist/tools/generated/discovery.gen.js.map +1 -1
- package/dist/tools/generated/disposition-codes.gen.d.ts.map +1 -1
- package/dist/tools/generated/disposition-codes.gen.js +11 -3
- package/dist/tools/generated/disposition-codes.gen.js.map +1 -1
- package/dist/tools/generated/disposition-log.gen.d.ts +3 -0
- package/dist/tools/generated/disposition-log.gen.d.ts.map +1 -0
- package/dist/tools/generated/disposition-log.gen.js +47 -0
- package/dist/tools/generated/disposition-log.gen.js.map +1 -0
- package/dist/tools/generated/disputes.gen.d.ts +3 -0
- package/dist/tools/generated/disputes.gen.d.ts.map +1 -0
- package/dist/tools/generated/disputes.gen.js +141 -0
- package/dist/tools/generated/disputes.gen.js.map +1 -0
- package/dist/tools/generated/distribution-log.gen.d.ts +3 -0
- package/dist/tools/generated/distribution-log.gen.d.ts.map +1 -0
- package/dist/tools/generated/distribution-log.gen.js +70 -0
- package/dist/tools/generated/distribution-log.gen.js.map +1 -0
- package/dist/tools/generated/docs.gen.d.ts +3 -0
- package/dist/tools/generated/docs.gen.d.ts.map +1 -0
- package/dist/tools/generated/docs.gen.js +29 -0
- package/dist/tools/generated/docs.gen.js.map +1 -0
- package/dist/tools/generated/email-templates.gen.d.ts.map +1 -1
- package/dist/tools/generated/email-templates.gen.js +27 -14
- package/dist/tools/generated/email-templates.gen.js.map +1 -1
- package/dist/tools/generated/engagements.gen.js +28 -28
- package/dist/tools/generated/engagements.gen.js.map +1 -1
- package/dist/tools/generated/enrollments.gen.d.ts.map +1 -1
- package/dist/tools/generated/enrollments.gen.js +82 -5
- package/dist/tools/generated/enrollments.gen.js.map +1 -1
- package/dist/tools/generated/events.gen.js +2 -2
- package/dist/tools/generated/events.gen.js.map +1 -1
- package/dist/tools/generated/export.gen.d.ts +3 -0
- package/dist/tools/generated/export.gen.d.ts.map +1 -0
- package/dist/tools/generated/export.gen.js +122 -0
- package/dist/tools/generated/export.gen.js.map +1 -0
- package/dist/tools/generated/index.d.ts.map +1 -1
- package/dist/tools/generated/index.js +184 -54
- package/dist/tools/generated/index.js.map +1 -1
- package/dist/tools/generated/intake-centers.gen.d.ts.map +1 -1
- package/dist/tools/generated/intake-centers.gen.js +88 -18
- package/dist/tools/generated/intake-centers.gen.js.map +1 -1
- package/dist/tools/generated/integrations.gen.d.ts.map +1 -1
- package/dist/tools/generated/integrations.gen.js +633 -144
- package/dist/tools/generated/integrations.gen.js.map +1 -1
- package/dist/tools/generated/invitations.gen.d.ts +3 -0
- package/dist/tools/generated/invitations.gen.d.ts.map +1 -0
- package/dist/tools/generated/invitations.gen.js +225 -0
- package/dist/tools/generated/invitations.gen.js.map +1 -0
- package/dist/tools/generated/ivr.gen.d.ts.map +1 -1
- package/dist/tools/generated/ivr.gen.js +28 -12
- package/dist/tools/generated/ivr.gen.js.map +1 -1
- package/dist/tools/generated/lead-import.gen.d.ts +3 -0
- package/dist/tools/generated/lead-import.gen.d.ts.map +1 -0
- package/dist/tools/generated/lead-import.gen.js +311 -0
- package/dist/tools/generated/lead-import.gen.js.map +1 -0
- package/dist/tools/generated/leads.gen.d.ts.map +1 -1
- package/dist/tools/generated/leads.gen.js +585 -166
- package/dist/tools/generated/leads.gen.js.map +1 -1
- package/dist/tools/generated/messaging-analytics.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-analytics.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-analytics.gen.js +248 -0
- package/dist/tools/generated/messaging-analytics.gen.js.map +1 -0
- package/dist/tools/generated/messaging-campaigns.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-campaigns.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-campaigns.gen.js +257 -0
- package/dist/tools/generated/messaging-campaigns.gen.js.map +1 -0
- package/dist/tools/generated/messaging-contacts.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-contacts.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-contacts.gen.js +293 -0
- package/dist/tools/generated/messaging-contacts.gen.js.map +1 -0
- package/dist/tools/generated/messaging-flows-api.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-flows-api.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-flows-api.gen.js +168 -0
- package/dist/tools/generated/messaging-flows-api.gen.js.map +1 -0
- package/dist/tools/generated/messaging-flows.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-flows.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-flows.gen.js +392 -0
- package/dist/tools/generated/messaging-flows.gen.js.map +1 -0
- package/dist/tools/generated/messaging-lists.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-lists.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-lists.gen.js +141 -0
- package/dist/tools/generated/messaging-lists.gen.js.map +1 -0
- package/dist/tools/generated/messaging-log.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-log.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-log.gen.js +51 -0
- package/dist/tools/generated/messaging-log.gen.js.map +1 -0
- package/dist/tools/generated/messaging-messages.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-messages.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-messages.gen.js +24 -0
- package/dist/tools/generated/messaging-messages.gen.js.map +1 -0
- package/dist/tools/generated/messaging-profiles.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-profiles.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-profiles.gen.js +88 -0
- package/dist/tools/generated/messaging-profiles.gen.js.map +1 -0
- package/dist/tools/generated/messaging-providers.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-providers.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-providers.gen.js +164 -0
- package/dist/tools/generated/messaging-providers.gen.js.map +1 -0
- package/dist/tools/generated/messaging-segments.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-segments.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-segments.gen.js +199 -0
- package/dist/tools/generated/messaging-segments.gen.js.map +1 -0
- package/dist/tools/generated/messaging-send.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-send.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-send.gen.js +22 -0
- package/dist/tools/generated/messaging-send.gen.js.map +1 -0
- package/dist/tools/generated/messaging-settings.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-settings.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-settings.gen.js +93 -0
- package/dist/tools/generated/messaging-settings.gen.js.map +1 -0
- package/dist/tools/generated/messaging-suppression.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-suppression.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-suppression.gen.js +93 -0
- package/dist/tools/generated/messaging-suppression.gen.js.map +1 -0
- package/dist/tools/generated/messaging-templates.gen.d.ts +3 -0
- package/dist/tools/generated/messaging-templates.gen.d.ts.map +1 -0
- package/dist/tools/generated/messaging-templates.gen.js +349 -0
- package/dist/tools/generated/messaging-templates.gen.js.map +1 -0
- package/dist/tools/generated/notification-subscriptions.gen.d.ts +3 -0
- package/dist/tools/generated/notification-subscriptions.gen.d.ts.map +1 -0
- package/dist/tools/generated/notification-subscriptions.gen.js +99 -0
- package/dist/tools/generated/notification-subscriptions.gen.js.map +1 -0
- package/dist/tools/generated/notifications.gen.d.ts +3 -0
- package/dist/tools/generated/notifications.gen.d.ts.map +1 -0
- package/dist/tools/generated/notifications.gen.js +65 -0
- package/dist/tools/generated/notifications.gen.js.map +1 -0
- package/dist/tools/generated/number-pool.gen.js +4 -4
- package/dist/tools/generated/number-pool.gen.js.map +1 -1
- package/dist/tools/generated/offers.gen.d.ts.map +1 -1
- package/dist/tools/generated/offers.gen.js +366 -96
- package/dist/tools/generated/offers.gen.js.map +1 -1
- package/dist/tools/generated/onboarding.gen.d.ts +3 -0
- package/dist/tools/generated/onboarding.gen.d.ts.map +1 -0
- package/dist/tools/generated/onboarding.gen.js +63 -0
- package/dist/tools/generated/onboarding.gen.js.map +1 -0
- package/dist/tools/generated/optimization.gen.d.ts +3 -0
- package/dist/tools/generated/optimization.gen.d.ts.map +1 -0
- package/dist/tools/generated/optimization.gen.js +42 -0
- package/dist/tools/generated/optimization.gen.js.map +1 -0
- package/dist/tools/generated/organizations.gen.d.ts.map +1 -1
- package/dist/tools/generated/organizations.gen.js +20 -117
- package/dist/tools/generated/organizations.gen.js.map +1 -1
- package/dist/tools/generated/partners.gen.d.ts.map +1 -1
- package/dist/tools/generated/partners.gen.js +110 -18
- package/dist/tools/generated/partners.gen.js.map +1 -1
- package/dist/tools/generated/payouts.gen.d.ts.map +1 -1
- package/dist/tools/generated/payouts.gen.js +40 -20
- package/dist/tools/generated/payouts.gen.js.map +1 -1
- package/dist/tools/generated/people.gen.d.ts.map +1 -1
- package/dist/tools/generated/people.gen.js +173 -114
- package/dist/tools/generated/people.gen.js.map +1 -1
- package/dist/tools/generated/ping-log.gen.d.ts +3 -0
- package/dist/tools/generated/ping-log.gen.d.ts.map +1 -0
- package/dist/tools/generated/ping-log.gen.js +225 -0
- package/dist/tools/generated/ping-log.gen.js.map +1 -0
- package/dist/tools/generated/postback-log.gen.d.ts +3 -0
- package/dist/tools/generated/postback-log.gen.d.ts.map +1 -0
- package/dist/tools/generated/postback-log.gen.js +83 -0
- package/dist/tools/generated/postback-log.gen.js.map +1 -0
- package/dist/tools/generated/posting-log.gen.d.ts.map +1 -1
- package/dist/tools/generated/posting-log.gen.js +132 -27
- package/dist/tools/generated/posting-log.gen.js.map +1 -1
- package/dist/tools/generated/products.gen.d.ts +3 -0
- package/dist/tools/generated/products.gen.d.ts.map +1 -0
- package/dist/tools/generated/products.gen.js +155 -0
- package/dist/tools/generated/products.gen.js.map +1 -0
- package/dist/tools/generated/providers.gen.d.ts +3 -0
- package/dist/tools/generated/providers.gen.d.ts.map +1 -0
- package/dist/tools/generated/providers.gen.js +140 -0
- package/dist/tools/generated/providers.gen.js.map +1 -0
- package/dist/tools/generated/public.gen.d.ts +3 -0
- package/dist/tools/generated/public.gen.d.ts.map +1 -0
- package/dist/tools/generated/public.gen.js +551 -0
- package/dist/tools/generated/public.gen.js.map +1 -0
- package/dist/tools/generated/referrer-portal.gen.d.ts +3 -0
- package/dist/tools/generated/referrer-portal.gen.d.ts.map +1 -0
- package/dist/tools/generated/referrer-portal.gen.js +98 -0
- package/dist/tools/generated/referrer-portal.gen.js.map +1 -0
- package/dist/tools/generated/referrers.gen.d.ts +3 -0
- package/dist/tools/generated/referrers.gen.d.ts.map +1 -0
- package/dist/tools/generated/referrers.gen.js +134 -0
- package/dist/tools/generated/referrers.gen.js.map +1 -0
- package/dist/tools/generated/refunds.gen.d.ts.map +1 -1
- package/dist/tools/generated/refunds.gen.js +110 -23
- package/dist/tools/generated/refunds.gen.js.map +1 -1
- package/dist/tools/generated/report-folders.gen.d.ts +3 -0
- package/dist/tools/generated/report-folders.gen.d.ts.map +1 -0
- package/dist/tools/generated/report-folders.gen.js +80 -0
- package/dist/tools/generated/report-folders.gen.js.map +1 -0
- package/dist/tools/generated/reports.gen.d.ts.map +1 -1
- package/dist/tools/generated/reports.gen.js +1891 -11
- package/dist/tools/generated/reports.gen.js.map +1 -1
- package/dist/tools/generated/saved-reports.gen.d.ts +3 -0
- package/dist/tools/generated/saved-reports.gen.d.ts.map +1 -0
- package/dist/tools/generated/saved-reports.gen.js +86 -0
- package/dist/tools/generated/saved-reports.gen.js.map +1 -0
- package/dist/tools/generated/scoring-models.gen.d.ts +3 -0
- package/dist/tools/generated/scoring-models.gen.d.ts.map +1 -0
- package/dist/tools/generated/scoring-models.gen.js +221 -0
- package/dist/tools/generated/scoring-models.gen.js.map +1 -0
- package/dist/tools/generated/search.gen.d.ts +3 -0
- package/dist/tools/generated/search.gen.d.ts.map +1 -0
- package/dist/tools/generated/search.gen.js +22 -0
- package/dist/tools/generated/search.gen.js.map +1 -0
- package/dist/tools/generated/security.gen.d.ts +3 -0
- package/dist/tools/generated/security.gen.d.ts.map +1 -0
- package/dist/tools/generated/security.gen.js +118 -0
- package/dist/tools/generated/security.gen.js.map +1 -0
- package/dist/tools/generated/sessions.gen.d.ts.map +1 -1
- package/dist/tools/generated/sessions.gen.js +9 -11
- package/dist/tools/generated/sessions.gen.js.map +1 -1
- package/dist/tools/generated/settings.gen.d.ts.map +1 -1
- package/dist/tools/generated/settings.gen.js +687 -125
- package/dist/tools/generated/settings.gen.js.map +1 -1
- package/dist/tools/generated/signups.gen.d.ts +3 -0
- package/dist/tools/generated/signups.gen.d.ts.map +1 -0
- package/dist/tools/generated/signups.gen.js +43 -0
- package/dist/tools/generated/signups.gen.js.map +1 -0
- package/dist/tools/generated/skus-checkout.gen.d.ts +3 -0
- package/dist/tools/generated/skus-checkout.gen.d.ts.map +1 -0
- package/dist/tools/generated/skus-checkout.gen.js +177 -0
- package/dist/tools/generated/skus-checkout.gen.js.map +1 -0
- package/dist/tools/generated/skus.gen.d.ts +3 -0
- package/dist/tools/generated/skus.gen.d.ts.map +1 -0
- package/dist/tools/generated/skus.gen.js +319 -0
- package/dist/tools/generated/skus.gen.js.map +1 -0
- package/dist/tools/generated/sms-templates.gen.d.ts +3 -0
- package/dist/tools/generated/sms-templates.gen.d.ts.map +1 -0
- package/dist/tools/generated/sms-templates.gen.js +103 -0
- package/dist/tools/generated/sms-templates.gen.js.map +1 -0
- package/dist/tools/generated/softphone.gen.d.ts +3 -0
- package/dist/tools/generated/softphone.gen.d.ts.map +1 -0
- package/dist/tools/generated/softphone.gen.js +263 -0
- package/dist/tools/generated/softphone.gen.js.map +1 -0
- package/dist/tools/generated/subscriptions.gen.d.ts +3 -0
- package/dist/tools/generated/subscriptions.gen.d.ts.map +1 -0
- package/dist/tools/generated/subscriptions.gen.js +86 -0
- package/dist/tools/generated/subscriptions.gen.js.map +1 -0
- package/dist/tools/generated/support.gen.d.ts +3 -0
- package/dist/tools/generated/support.gen.d.ts.map +1 -0
- package/dist/tools/generated/support.gen.js +93 -0
- package/dist/tools/generated/support.gen.js.map +1 -0
- package/dist/tools/generated/team.gen.d.ts +3 -0
- package/dist/tools/generated/team.gen.d.ts.map +1 -0
- package/dist/tools/generated/team.gen.js +424 -0
- package/dist/tools/generated/team.gen.js.map +1 -0
- package/dist/tools/generated/teams.gen.d.ts +3 -0
- package/dist/tools/generated/teams.gen.d.ts.map +1 -0
- package/dist/tools/generated/teams.gen.js +397 -0
- package/dist/tools/generated/teams.gen.js.map +1 -0
- package/dist/tools/generated/telephony.gen.d.ts.map +1 -1
- package/dist/tools/generated/telephony.gen.js +112 -92
- package/dist/tools/generated/telephony.gen.js.map +1 -1
- package/dist/tools/generated/tracking-numbers.gen.d.ts.map +1 -1
- package/dist/tools/generated/tracking-numbers.gen.js +70 -15
- package/dist/tools/generated/tracking-numbers.gen.js.map +1 -1
- package/dist/tools/generated/transactions.gen.d.ts.map +1 -1
- package/dist/tools/generated/transactions.gen.js +9 -18
- package/dist/tools/generated/transactions.gen.js.map +1 -1
- package/dist/tools/generated/users.gen.d.ts.map +1 -1
- package/dist/tools/generated/users.gen.js +336 -208
- package/dist/tools/generated/users.gen.js.map +1 -1
- package/dist/tools/generated/vertical-catalog.gen.d.ts +3 -0
- package/dist/tools/generated/vertical-catalog.gen.d.ts.map +1 -0
- package/dist/tools/generated/vertical-catalog.gen.js +199 -0
- package/dist/tools/generated/vertical-catalog.gen.js.map +1 -0
- package/dist/tools/generated/vertical-groups.gen.d.ts.map +1 -1
- package/dist/tools/generated/vertical-groups.gen.js +39 -22
- package/dist/tools/generated/vertical-groups.gen.js.map +1 -1
- package/dist/tools/generated/verticals.gen.d.ts.map +1 -1
- package/dist/tools/generated/verticals.gen.js +338 -28
- package/dist/tools/generated/verticals.gen.js.map +1 -1
- package/dist/tools/generated/webhook-log.gen.d.ts +3 -0
- package/dist/tools/generated/webhook-log.gen.d.ts.map +1 -0
- package/dist/tools/generated/webhook-log.gen.js +85 -0
- package/dist/tools/generated/webhook-log.gen.js.map +1 -0
- package/dist/tools/generated/webhooks.gen.d.ts +3 -0
- package/dist/tools/generated/webhooks.gen.d.ts.map +1 -0
- package/dist/tools/generated/webhooks.gen.js +1873 -0
- package/dist/tools/generated/webhooks.gen.js.map +1 -0
- package/dist/tools/generated/wizard.gen.d.ts +3 -0
- package/dist/tools/generated/wizard.gen.d.ts.map +1 -0
- package/dist/tools/generated/wizard.gen.js +81 -0
- package/dist/tools/generated/wizard.gen.js.map +1 -0
- package/dist/tools/generated/wizards.gen.d.ts +3 -0
- package/dist/tools/generated/wizards.gen.d.ts.map +1 -0
- package/dist/tools/generated/wizards.gen.js +150 -0
- package/dist/tools/generated/wizards.gen.js.map +1 -0
- package/dist/tools/ui.js +3 -3
- package/dist/tools/ui.js.map +1 -1
- package/package.json +8 -8
- package/dist/api-client.d.ts +0 -10
- package/dist/api-client.d.ts.map +0 -1
- package/dist/api-client.js +0 -64
- package/dist/api-client.js.map +0 -1
- package/dist/register.d.ts +0 -4
- package/dist/register.d.ts.map +0 -1
- package/dist/register.js +0 -23
- package/dist/register.js.map +0 -1
- package/dist/tools/buyers.d.ts +0 -4
- package/dist/tools/buyers.d.ts.map +0 -1
- package/dist/tools/buyers.js +0 -61
- package/dist/tools/buyers.js.map +0 -1
- package/dist/tools/campaigns.d.ts +0 -4
- package/dist/tools/campaigns.d.ts.map +0 -1
- package/dist/tools/campaigns.js +0 -45
- package/dist/tools/campaigns.js.map +0 -1
- package/dist/tools/compliance.d.ts +0 -4
- package/dist/tools/compliance.d.ts.map +0 -1
- package/dist/tools/compliance.js +0 -28
- package/dist/tools/compliance.js.map +0 -1
- package/dist/tools/contracts.d.ts +0 -4
- package/dist/tools/contracts.d.ts.map +0 -1
- package/dist/tools/contracts.js +0 -48
- package/dist/tools/contracts.js.map +0 -1
- package/dist/tools/generated/tenants.gen.d.ts +0 -3
- package/dist/tools/generated/tenants.gen.d.ts.map +0 -1
- package/dist/tools/generated/tenants.gen.js +0 -223
- package/dist/tools/generated/tenants.gen.js.map +0 -1
- package/dist/tools/leads.d.ts +0 -4
- package/dist/tools/leads.d.ts.map +0 -1
- package/dist/tools/leads.js +0 -69
- package/dist/tools/leads.js.map +0 -1
- package/dist/tools/offers.d.ts +0 -4
- package/dist/tools/offers.d.ts.map +0 -1
- package/dist/tools/offers.js +0 -33
- package/dist/tools/offers.js.map +0 -1
- package/dist/tools/partners.d.ts +0 -4
- package/dist/tools/partners.d.ts.map +0 -1
- package/dist/tools/partners.js +0 -30
- package/dist/tools/partners.js.map +0 -1
- package/dist/tools/people.d.ts +0 -4
- package/dist/tools/people.d.ts.map +0 -1
- package/dist/tools/people.js +0 -42
- package/dist/tools/people.js.map +0 -1
- package/dist/tools/reports.d.ts +0 -4
- package/dist/tools/reports.d.ts.map +0 -1
- package/dist/tools/reports.js +0 -67
- package/dist/tools/reports.js.map +0 -1
- package/dist/tools/verticals.d.ts +0 -4
- package/dist/tools/verticals.d.ts.map +0 -1
- package/dist/tools/verticals.js +0 -25
- package/dist/tools/verticals.js.map +0 -1
- package/dist/types.d.ts +0 -19
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
|
@@ -337,6 +337,48 @@ When a lead arrives:
|
|
|
337
337
|
| `GET /api/v1/campaigns/{id}/posting` | Get posting spec |
|
|
338
338
|
| `POST /api/v1/leads/submit` | Submit test lead |
|
|
339
339
|
|
|
340
|
+
## People (CRM)
|
|
341
|
+
|
|
342
|
+
The People section is a person-level CRM. Every lead creates or updates a person record (matched by email/phone). People aggregate all activity for a contact across leads, calls, and engagements.
|
|
343
|
+
|
|
344
|
+
| Feature | Description |
|
|
345
|
+
|---------|-------------|
|
|
346
|
+
| Person timeline | Full activity history (leads, deliveries, calls, dispositions) |
|
|
347
|
+
| Person leads | All leads associated with a person |
|
|
348
|
+
| Person calls | All calls for a person |
|
|
349
|
+
| Person notes | Internal notes attached to a contact |
|
|
350
|
+
| Merge | Merge duplicate person records |
|
|
351
|
+
|
|
352
|
+
## Sessions (Multi-Step Capture)
|
|
353
|
+
|
|
354
|
+
Sessions enable multi-step lead capture funnels. Partners collect data across multiple form steps, then submit on the final step.
|
|
355
|
+
|
|
356
|
+
**Flow:** Create session → PATCH data at each step → Submit on final step (triggers routing)
|
|
357
|
+
|
|
358
|
+
Sessions expire after 24 hours. Each PATCH merges data (doesn't replace). The lead is only created on final submit.
|
|
359
|
+
|
|
360
|
+
**Co-Registration (Coreg):** Submit the same contact through multiple campaigns in a single session. Primary lead submits first, then coreg leads are linked via `parentLeadId`.
|
|
361
|
+
|
|
362
|
+
## Engagements
|
|
363
|
+
|
|
364
|
+
Engagements track CPA-eligible events across leads. When a contract has CPA configured (cpaAmount + cpaWindowDays), the system monitors for conversion dispositions within the window.
|
|
365
|
+
|
|
366
|
+
## Consent
|
|
367
|
+
|
|
368
|
+
Consent verification accounts provide TCPA compliance tracking. Certificates document that consent was collected properly for each lead.
|
|
369
|
+
|
|
370
|
+
## Posting Log
|
|
371
|
+
|
|
372
|
+
The posting log records every lead submission and delivery attempt with full request/response payloads. Use it for:
|
|
373
|
+
- Debugging submission failures
|
|
374
|
+
- Verifying delivery payloads
|
|
375
|
+
- Troubleshooting integration issues
|
|
376
|
+
- Auditing partner submissions
|
|
377
|
+
|
|
378
|
+
## Onboarding
|
|
379
|
+
|
|
380
|
+
The `setup_partner_onboarding` tool provides a guided multi-step partner onboarding flow — creates the partner, campaign, and links to an offer in one workflow.
|
|
381
|
+
|
|
340
382
|
## Gotchas
|
|
341
383
|
|
|
342
384
|
1. **Vertical mismatch** — Campaign, contract, and offer must all reference the SAME vertical
|
|
@@ -331,6 +331,8 @@ GET /api/buyer/leads
|
|
|
331
331
|
Authorization: Bearer lr_your_buyer_api_key
|
|
332
332
|
```
|
|
333
333
|
|
|
334
|
+
To use this key with Claude Code (the MCP server), set `ISCALE_MCP_ROLE` to `buyer` in `.mcp.json`. You then get the buyer portal tools only.
|
|
335
|
+
|
|
334
336
|
## Ping-Post (Auction Model)
|
|
335
337
|
|
|
336
338
|
If your contract uses ping-post pricing, here's how it works:
|
|
@@ -403,3 +405,41 @@ Or to decline:
|
|
|
403
405
|
1. Make a payment to reduce your balance
|
|
404
406
|
2. Ask your admin to increase your creditLimit
|
|
405
407
|
3. Consider enabling autoRecharge to automatically fund your account
|
|
408
|
+
|
|
409
|
+
## People & Contacts
|
|
410
|
+
|
|
411
|
+
The People section shows contacts from leads you've received. You can search by name, email, or phone and view a contact's full timeline.
|
|
412
|
+
|
|
413
|
+
### Contact Timeline
|
|
414
|
+
|
|
415
|
+
Each contact has a timeline showing:
|
|
416
|
+
- Lead submissions
|
|
417
|
+
- Delivery events
|
|
418
|
+
- Disposition updates
|
|
419
|
+
- Call records
|
|
420
|
+
|
|
421
|
+
Use `get_person_timeline` or browse People in the buyer portal to see the full history for any contact.
|
|
422
|
+
|
|
423
|
+
## Engagements
|
|
424
|
+
|
|
425
|
+
Engagements track CPA-eligible events on your leads. When configured, the system monitors whether leads convert within the CPA window and triggers payouts.
|
|
426
|
+
|
|
427
|
+
View your engagements in the portal or via `list_buyer_engagements`.
|
|
428
|
+
|
|
429
|
+
## Calls
|
|
430
|
+
|
|
431
|
+
If your contracts include call tracking, you can view call records in the Calls section. Each call shows:
|
|
432
|
+
- Duration and recording (if available)
|
|
433
|
+
- Disposition status
|
|
434
|
+
- Which contract/campaign it came through
|
|
435
|
+
|
|
436
|
+
Use `set_call_disposition` to update call outcomes and `trigger_call_conversion` to trigger CPA payouts on calls.
|
|
437
|
+
|
|
438
|
+
## Posting Log
|
|
439
|
+
|
|
440
|
+
The posting log shows every delivery attempt to your endpoints. Use it to:
|
|
441
|
+
- Debug delivery failures (see request/response payloads)
|
|
442
|
+
- Verify leads were delivered correctly
|
|
443
|
+
- Check timing of deliveries
|
|
444
|
+
|
|
445
|
+
Access via `get_buyer_posting_log` or the Posting Log page in the buyer portal.
|
|
@@ -39,7 +39,7 @@ Your System → POST /api/v1/leads/submit → iSCALE Routing Engine → Buyer(s)
|
|
|
39
39
|
|
|
40
40
|
## Submitting Leads
|
|
41
41
|
|
|
42
|
-
###
|
|
42
|
+
### Standard Submission
|
|
43
43
|
|
|
44
44
|
```
|
|
45
45
|
POST /api/v1/leads/submit
|
|
@@ -153,6 +153,45 @@ Some campaigns have additional fields beyond the vertical. Check the posting spe
|
|
|
153
153
|
| TCPA consent required | tcpaConsent must be `true` |
|
|
154
154
|
| Missing TrustedForm certificate | trustedFormCertUrl is required |
|
|
155
155
|
|
|
156
|
+
### Ping-Post (Real-Time Bidding)
|
|
157
|
+
|
|
158
|
+
Some campaigns support ping-post, where buyers bid on leads before committing. As a partner, the flow is:
|
|
159
|
+
|
|
160
|
+
1. **Ping** — submit lead attributes (no PII) to see which buyers match and at what price
|
|
161
|
+
2. **Review bids** — see the best available price
|
|
162
|
+
3. **Post** — commit the lead and deliver PII to the winning buyer(s)
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
POST /api/v1/leads/ping
|
|
166
|
+
Authorization: Bearer lr_xxx
|
|
167
|
+
|
|
168
|
+
{
|
|
169
|
+
"campaignId": "abc-123",
|
|
170
|
+
"state": "CA",
|
|
171
|
+
"zipCode": "90210",
|
|
172
|
+
"homeOwner": true,
|
|
173
|
+
"utilityBill": 150
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Response includes matched contracts and bid prices. Then convert to a sale:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
POST /api/v1/leads/post
|
|
181
|
+
Authorization: Bearer lr_xxx
|
|
182
|
+
|
|
183
|
+
{
|
|
184
|
+
"pingId": "ping-uuid-from-response",
|
|
185
|
+
"firstName": "Jane",
|
|
186
|
+
"lastName": "Smith",
|
|
187
|
+
"email": "jane@example.com",
|
|
188
|
+
"phone": "5551234567",
|
|
189
|
+
...
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Ping-post lets you check demand and price before submitting PII. Not all campaigns support it — check your campaign's posting spec.
|
|
194
|
+
|
|
156
195
|
## Getting Your Posting Spec
|
|
157
196
|
|
|
158
197
|
The posting spec tells you exactly what fields to send for a specific campaign.
|
|
@@ -214,6 +253,30 @@ Go to **People > Leads tab** to see all submitted leads with:
|
|
|
214
253
|
|
|
215
254
|
Click a lead to see full details including delivery status.
|
|
216
255
|
|
|
256
|
+
## Offer Enrollment
|
|
257
|
+
|
|
258
|
+
Offers define which campaigns feed leads to which buyers. As a partner, you can browse available offers and request enrollment.
|
|
259
|
+
|
|
260
|
+
### Browsing Offers
|
|
261
|
+
|
|
262
|
+
Go to **Offers** in the partner portal to see:
|
|
263
|
+
- **Available Offers** — offers you can enroll in (public visibility)
|
|
264
|
+
- **My Campaigns** — your active campaigns and which offers they're linked to
|
|
265
|
+
|
|
266
|
+
### Requesting Enrollment
|
|
267
|
+
|
|
268
|
+
1. Find an offer that matches your lead type and volume
|
|
269
|
+
2. Click **Request Enrollment** (or use the API: `request_offer_enrollment`)
|
|
270
|
+
3. Your admin reviews and approves the enrollment
|
|
271
|
+
4. Once approved, a campaign is created and linked to the offer
|
|
272
|
+
|
|
273
|
+
### Offer Stats
|
|
274
|
+
|
|
275
|
+
For offers you're enrolled in, you can view performance stats:
|
|
276
|
+
- Lead volume and acceptance rate
|
|
277
|
+
- Revenue generated
|
|
278
|
+
- Top-performing campaigns
|
|
279
|
+
|
|
217
280
|
## API Keys
|
|
218
281
|
|
|
219
282
|
You can access the partner portal API programmatically using API keys.
|
|
@@ -233,6 +296,8 @@ GET /api/partner/leads
|
|
|
233
296
|
Authorization: Bearer lr_your_partner_api_key
|
|
234
297
|
```
|
|
235
298
|
|
|
299
|
+
To use this key with Claude Code (the MCP server), set `ISCALE_MCP_ROLE` to `partner` in `.mcp.json`. You then get the partner portal tools only.
|
|
300
|
+
|
|
236
301
|
### Partner API Endpoints
|
|
237
302
|
|
|
238
303
|
| Endpoint | Method | Description |
|
|
@@ -248,6 +313,12 @@ Authorization: Bearer lr_your_partner_api_key
|
|
|
248
313
|
| `/api/partner/settings` | GET/PUT | Your profile |
|
|
249
314
|
| `/api/partner/api-keys` | GET/POST | List/create API keys |
|
|
250
315
|
| `/api/partner/api-keys/{id}` | DELETE | Revoke an API key |
|
|
316
|
+
| `/api/partner/consent/accounts` | GET | Consent verification accounts |
|
|
317
|
+
| `/api/partner/calls` | GET | Calls from your campaigns |
|
|
318
|
+
| `/api/partner/engagements` | GET | Your engagements |
|
|
319
|
+
| `/api/partner/people` | GET | Search your lead contacts |
|
|
320
|
+
| `/api/partner/people/{id}` | GET | Contact detail |
|
|
321
|
+
| `/api/partner/people/{id}/timeline` | GET | 90-day activity timeline |
|
|
251
322
|
|
|
252
323
|
## Sessions — Multi-Step Lead Capture
|
|
253
324
|
|
|
@@ -47,20 +47,23 @@ After role selection, check if the MCP server is configured:
|
|
|
47
47
|
To connect Claude Code to your iSCALE instance, I need two things:
|
|
48
48
|
|
|
49
49
|
1. **Your iSCALE URL** — the URL where you access iSCALE
|
|
50
|
-
(e.g., https://
|
|
50
|
+
(e.g., https://theleadrouter.com)
|
|
51
51
|
|
|
52
|
-
2. **An API key
|
|
53
|
-
|
|
52
|
+
2. **An API key that matches your role.** It starts with lr_.
|
|
53
|
+
- Admins: a System key from System → API Keys in the admin dashboard.
|
|
54
|
+
- Partners: a partner key from Settings in the partner portal.
|
|
55
|
+
- Buyers: a buyer key from Settings in the buyer portal.
|
|
56
|
+
Do NOT use a campaign posting key (pk_…). See the README for screenshots.
|
|
54
57
|
|
|
55
58
|
Do you have these ready?
|
|
56
59
|
```
|
|
57
60
|
|
|
58
|
-
If they have the info, write the `.mcp.json` config and tell them to restart Claude Code.
|
|
61
|
+
If they have the info, write the `.mcp.json` config (`ISCALE_API_URL` = `https://theleadrouter.com`, `ISCALE_API_KEY` = their `lr_` key) and tell them to restart Claude Code. Set `ISCALE_MCP_ROLE` to match the key: leave it out for a System key (it defaults to `admin`), `partner` for a partner key, `buyer` for a buyer key. The role decides which tools they get.
|
|
59
62
|
|
|
60
63
|
If they don't have an API key yet:
|
|
61
|
-
- **Admins:** "Go to
|
|
62
|
-
- **Partners:** "Ask your admin to create a partner API key for you, or go to Settings in your partner portal."
|
|
63
|
-
- **Buyers:** "Ask your admin to create a buyer API key for you, or go to Settings in your buyer portal."
|
|
64
|
+
- **Admins:** Point them at the README screenshot (`docs/create-api-key.png`) and say: "Go to **System → API Keys** (not Settings). Click Create API Key. Key Type = **System**. Select **admin** plus the app scopes you need (`routing`, `messaging`, `calls`). Copy the `lr_` value — it is shown once. A posting key (`pk_`) will not work."
|
|
65
|
+
- **Partners:** "Ask your admin to create a partner API key for you, or go to Settings in your partner portal. Do not use a campaign posting key. In `.mcp.json`, set `ISCALE_MCP_ROLE` to `partner`."
|
|
66
|
+
- **Buyers:** "Ask your admin to create a buyer API key for you, or go to Settings in your buyer portal. In `.mcp.json`, set `ISCALE_MCP_ROLE` to `buyer`."
|
|
64
67
|
|
|
65
68
|
## Step 3: Role-Specific Walkthrough
|
|
66
69
|
|
package/CLAUDE.md
CHANGED
|
@@ -205,7 +205,7 @@ A buyer's CRM or backend system for lead delivery.
|
|
|
205
205
|
## Common Gotchas
|
|
206
206
|
|
|
207
207
|
1. **Vertical mismatch** — Campaign, contract, and offer must reference the SAME vertical
|
|
208
|
-
2. **Posting key vs API key** —
|
|
208
|
+
2. **Posting key vs API key** — a campaign posting key (`pk_…`, shown on Posting Specs) is for `POST /api/v1/leads/submit` only. Claude Code / MCP takes an `lr_…` key plus `ISCALE_MCP_ROLE` to match it. Admins: a **System** key minted at **System → API Keys** with Key Type = System and the `admin` scope; role `admin` is the default. Partners: a partner portal key with `ISCALE_MCP_ROLE=partner`. Buyers: a buyer portal key with `ISCALE_MCP_ROLE=buyer`. A posting key never works, and a partner or buyer key left on the default `admin` role fails on admin tools. Screenshot of the real dialog: `docs/create-api-key.png`.
|
|
209
209
|
3. **Buyer balance** — if balance exceeds creditLimit, contracts are skipped during routing
|
|
210
210
|
4. **Cap resets** — caps reset at midnight in the contract's scheduleTimezone, not UTC
|
|
211
211
|
5. **Inactive cascades** — pausing a buyer pauses all their contracts; pausing an offer can cascade to campaigns
|
|
@@ -232,7 +232,7 @@ A buyer's CRM or backend system for lead delivery.
|
|
|
232
232
|
## Auth
|
|
233
233
|
|
|
234
234
|
- **Admin dashboard:** Session-based (JWT in `lr_session` cookie)
|
|
235
|
-
- **Partner lead submission:** `Authorization: Bearer
|
|
236
|
-
- **Partner portal API:** Session cookie or partner API key
|
|
237
|
-
- **Buyer portal API:** Session cookie or buyer API key
|
|
238
|
-
- **Admin API:** `Authorization: Bearer lr_xxx` (admin API
|
|
235
|
+
- **Partner lead submission:** `Authorization: Bearer pk_xxx` (campaign posting key)
|
|
236
|
+
- **Partner portal API:** Session cookie or partner API key (`lr_xxx`)
|
|
237
|
+
- **Buyer portal API:** Session cookie or buyer API key (`lr_xxx`)
|
|
238
|
+
- **Admin API / Claude Code MCP:** `Authorization: Bearer lr_xxx` (System key with `admin` scope, minted at System → API Keys — not Settings). Partner and buyer portal keys also work with the MCP server when `ISCALE_MCP_ROLE` is `partner` or `buyer`.
|
package/README.md
CHANGED
|
@@ -78,11 +78,44 @@ The MCP server lets Claude Code interact with your theLeadRouter instance direct
|
|
|
78
78
|
|
|
79
79
|
### 1. Generate an API key
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Pick the key that matches who you are. The key decides which tools you get, so set `ISCALE_MCP_ROLE` to match it.
|
|
82
|
+
|
|
83
|
+
| You are | Key | `ISCALE_MCP_ROLE` |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| A tenant admin | **System** key from **System → API Keys** (steps below) | `admin` (the default) |
|
|
86
|
+
| A partner | Partner portal key (`lr_…`, scope `routing`). Make it in **Partner portal → Settings**, or an admin makes it on the partner's **API Keys** tab. | `partner` |
|
|
87
|
+
| A buyer | Buyer portal key (`lr_…`). Make it in **Buyer portal → Settings**. | `buyer` |
|
|
88
|
+
|
|
89
|
+
A campaign posting key (`pk_…`) never works here. It only submits leads.
|
|
90
|
+
|
|
91
|
+
#### System key (admins)
|
|
92
|
+
|
|
93
|
+
1. In the admin dashboard go to **System → API Keys** (`/admin/api-keys`). This is **not** Settings, and it is **not** the API Keys tab on a partner or buyer.
|
|
94
|
+
2. Click **Create API Key**.
|
|
95
|
+
3. Fill the dialog like this — the screenshot below is the real form:
|
|
96
|
+
|
|
97
|
+
| Field | What to pick |
|
|
98
|
+
|---|---|
|
|
99
|
+
| **Key Name** | Anything you'll recognize (e.g. `Claude Code`) |
|
|
100
|
+
| **Key Type** | **System** — leave Buyer and Partner unselected |
|
|
101
|
+
| **Scopes** | **admin** plus every app this key needs (`routing`, `messaging`, `calls`, `calls_rtb`). There is no "all" shortcut; `admin` is never implied by the app scopes. |
|
|
102
|
+
| **Allow billing operations** | Leave **off** unless Claude must move money |
|
|
103
|
+
| **Read-only key** | Leave **off** if you want Claude to create or update things |
|
|
104
|
+
| **Allow PII access** | On if you want unmasked names, emails, and phones |
|
|
105
|
+
|
|
106
|
+
<p align="left">
|
|
107
|
+
<img src="docs/create-api-key.png" alt="Create API Key dialog. Key Type is System. Scopes admin, routing, messaging, calls, and calls_rtb are selected. Allow billing operations is off. Read-only is off. Allow PII access is on." width="420" />
|
|
108
|
+
</p>
|
|
109
|
+
|
|
110
|
+
4. Click **Create Key** and copy the value immediately. It starts with `lr_` and is shown **once**.
|
|
111
|
+
|
|
112
|
+
**Wrong keys people have used:** a campaign posting key (`pk_…`, from an offer's Posting Specs page), or a System key that only has `routing` and not `admin`. Those authenticate, then fail on admin tools. A Partner or Buyer key with the default role (`admin`) fails the same way; set `ISCALE_MCP_ROLE` to `partner` or `buyer`.
|
|
82
113
|
|
|
83
114
|
### 2. Add to your Claude Code config
|
|
84
115
|
|
|
85
|
-
Add the following to your `.mcp.json` file. Replace `lr_your_key_here` with
|
|
116
|
+
Add the following to your `.mcp.json` file. Replace `lr_your_key_here` with the key you just copied.
|
|
117
|
+
|
|
118
|
+
**Admin (System key).** No role needed; `admin` is the default.
|
|
86
119
|
|
|
87
120
|
```json
|
|
88
121
|
{
|
|
@@ -91,7 +124,7 @@ Add the following to your `.mcp.json` file. Replace `lr_your_key_here` with your
|
|
|
91
124
|
"command": "npx",
|
|
92
125
|
"args": ["-y", "theleadrouter-mcp@latest"],
|
|
93
126
|
"env": {
|
|
94
|
-
"ISCALE_API_URL": "https://
|
|
127
|
+
"ISCALE_API_URL": "https://theleadrouter.com",
|
|
95
128
|
"ISCALE_API_KEY": "lr_your_key_here"
|
|
96
129
|
}
|
|
97
130
|
}
|
|
@@ -99,6 +132,74 @@ Add the following to your `.mcp.json` file. Replace `lr_your_key_here` with your
|
|
|
99
132
|
}
|
|
100
133
|
```
|
|
101
134
|
|
|
135
|
+
**Partner (partner portal key).**
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"mcpServers": {
|
|
140
|
+
"theleadrouter": {
|
|
141
|
+
"command": "npx",
|
|
142
|
+
"args": ["-y", "theleadrouter-mcp@latest"],
|
|
143
|
+
"env": {
|
|
144
|
+
"ISCALE_API_URL": "https://theleadrouter.com",
|
|
145
|
+
"ISCALE_API_KEY": "lr_your_key_here",
|
|
146
|
+
"ISCALE_MCP_ROLE": "partner"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Buyer (buyer portal key).**
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"mcpServers": {
|
|
158
|
+
"theleadrouter": {
|
|
159
|
+
"command": "npx",
|
|
160
|
+
"args": ["-y", "theleadrouter-mcp@latest"],
|
|
161
|
+
"env": {
|
|
162
|
+
"ISCALE_API_URL": "https://theleadrouter.com",
|
|
163
|
+
"ISCALE_API_KEY": "lr_your_key_here",
|
|
164
|
+
"ISCALE_MCP_ROLE": "buyer"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### Role and scope filters
|
|
172
|
+
|
|
173
|
+
The role picks your tool set: about 900 tools for `admin`, 93 for `buyer`, 84 for `partner` (reads and writes; [sensitive tools](#sensitive-tools) excluded). You can narrow it further to reduce context usage:
|
|
174
|
+
|
|
175
|
+
| Env var | Values | Effect |
|
|
176
|
+
|---|---|---|
|
|
177
|
+
| `ISCALE_MCP_ROLE` | `admin` (default) \| `buyer` \| `partner` | Which key you are using. Only tools that role may call are registered. Any other value stops the server with an error. |
|
|
178
|
+
| `ISCALE_MCP_SCOPE` | `read` \| `write` \| `all` (default) | Filter by write flag |
|
|
179
|
+
| `ISCALE_MCP_DOMAINS` | comma list, e.g. `verticals,campaigns,buyers` | Restrict to specific domains |
|
|
180
|
+
| `ISCALE_MCP_INCLUDE_UI` | `true` (default `false`) | Include admin-UI navigation tools (only useful inside the in-app agent) |
|
|
181
|
+
| `ISCALE_MCP_ALLOW_SENSITIVE` | `true` (default: hidden) | Register the [sensitive tools](#sensitive-tools). Only the exact value `true` enables them. |
|
|
182
|
+
|
|
183
|
+
#### Sensitive tools
|
|
184
|
+
|
|
185
|
+
Tools that mint, reveal, rotate or redeem a credential, token or secret, or that impersonate another user, are **not registered by default**. An agent cannot call a tool it was never given, so a prompt-injected or confused agent cannot mint an API key, read a provider credential or start impersonation through this server.
|
|
186
|
+
|
|
187
|
+
Hidden by default (full list in [`src/sensitive-tools.ts`](src/sensitive-tools.ts)):
|
|
188
|
+
|
|
189
|
+
- API keys: admin, messaging, buyer and partner key create / list / get / update / revoke
|
|
190
|
+
- Posting keys and spec / setup tokens: rotate, regenerate, create, list, revoke
|
|
191
|
+
- Passwords, impersonation, sign-in codes, Stripe billing-portal sessions
|
|
192
|
+
- Provider credentials and intake credential propagation, the Zoho OAuth callback
|
|
193
|
+
- Signed recording URLs, softphone tokens, invitation bearer links
|
|
194
|
+
|
|
195
|
+
To enable them set `ISCALE_MCP_ALLOW_SENSITIVE=true`. Any other value (`1`, `yes`, `TRUE`, unset) keeps them hidden. Enable it only for a session that needs it.
|
|
196
|
+
|
|
197
|
+
Recommendations:
|
|
198
|
+
|
|
199
|
+
- **Least privilege.** Use a key whose role and scopes cover only what you need. Combine `ISCALE_MCP_SCOPE=read` with a read-only key when you only need to look things up.
|
|
200
|
+
- **https only.** Point `ISCALE_API_URL` at an `https://` URL. The server prints a warning to stderr at startup when the URL is not https and not `localhost` / `127.0.0.1` / `[::1]`. It does not refuse to start.
|
|
201
|
+
- **Treat the key as a password.** Keep it in your MCP config's `env`, never in a prompt, and revoke it at System → API Keys if it leaks.
|
|
202
|
+
|
|
102
203
|
### 3. Restart Claude Code
|
|
103
204
|
|
|
104
205
|
Close and reopen Claude Code so it picks up the new MCP server config.
|
|
@@ -109,7 +210,7 @@ Try asking: `"Use search_leads to show me recent leads"`
|
|
|
109
210
|
|
|
110
211
|
## MCP Server Tools
|
|
111
212
|
|
|
112
|
-
Once connected, Claude Code can use
|
|
213
|
+
Once connected with a System key, Claude Code can use about 900 tools across these categories (partner and buyer keys get the tools for their own portal):
|
|
113
214
|
|
|
114
215
|
| Category | Examples |
|
|
115
216
|
|----------|----------|
|
|
@@ -153,6 +254,37 @@ Once connected, Claude Code can use 300+ tools across these categories:
|
|
|
153
254
|
"How many leads am I getting per day this week?"
|
|
154
255
|
```
|
|
155
256
|
|
|
257
|
+
## Regenerating the Tool Catalog (maintainers)
|
|
258
|
+
|
|
259
|
+
Tools are generated from three spec snapshots committed in `spec/`. They are the same specs
|
|
260
|
+
the platform serves for each API-key role:
|
|
261
|
+
|
|
262
|
+
| File | Used for |
|
|
263
|
+
|---|---|
|
|
264
|
+
| `spec/openapi-customer.yaml` | Every tool definition (the tenant/admin surface; no superadmin ops) |
|
|
265
|
+
| `spec/openapi-partner.yaml` | Which tools get the `partner` role |
|
|
266
|
+
| `spec/openapi-buyer.yaml` | Which tools get the `buyer` role |
|
|
267
|
+
|
|
268
|
+
A tool gets `admin` when it is in the customer spec and its path is not under `/api/buyer/`,
|
|
269
|
+
`/api/partner/`, `/api/referrer/` or `/api/v1/buyer/me/`. An op under one of those portal paths that is missing from
|
|
270
|
+
that portal's spec gets no role; the generator skips it and lists it in its warnings.
|
|
271
|
+
The generator fails (exit 1) if any `/api/superadmin/` or `x-superadmin-only` op shows up.
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# 1. Refresh the snapshots from the monorepo (regen there first if schema changed)
|
|
275
|
+
cp /path/to/theLeadRouter/apps/routing/generated/docs/openapi-{customer,partner,buyer}.yaml spec/
|
|
276
|
+
|
|
277
|
+
# 2. Regenerate src/tools/generated/*
|
|
278
|
+
npm run generate
|
|
279
|
+
|
|
280
|
+
# 3. Verify catalog ↔ spec parity + run the suite
|
|
281
|
+
npm test
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
`SPEC_DIR=/path/to/dir npm run generate` reads the three files from another directory.
|
|
285
|
+
The spec-parity test (`src/spec-parity.test.ts`) fails if the catalog drifts from the
|
|
286
|
+
committed specs — regenerate rather than hand-editing anything under `src/tools/generated/`.
|
|
287
|
+
|
|
156
288
|
## About
|
|
157
289
|
|
|
158
290
|
theLeadRouter is a B2B lead distribution platform that routes leads from partners to buyers through offer-based contracts. Learn more at [theleadrouter.com](https://theleadrouter.com).
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,35 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { ApiKeyAuthAdapter } from './auth-adapter.js';
|
|
3
|
+
import type { ToolDefinition, ToolRegistry } from './registry.js';
|
|
2
4
|
export { ToolRegistry, type ToolDefinition, type ToolMetadata } from './registry.js';
|
|
3
5
|
export { SessionAuthAdapter, ApiKeyAuthAdapter, type AuthAdapter } from './auth-adapter.js';
|
|
4
6
|
export { registerUiTools } from './tools/ui.js';
|
|
5
7
|
export { registerCompositeTools } from './tools/composite.js';
|
|
6
8
|
export { buildRegistry } from './build-registry.js';
|
|
9
|
+
export { SENSITIVE_TOOL_NAMES } from './sensitive-tools.js';
|
|
10
|
+
export declare const ROLES: readonly ["admin", "buyer", "partner"];
|
|
11
|
+
export type Role = (typeof ROLES)[number];
|
|
12
|
+
export type ScopeFilter = {
|
|
13
|
+
scope?: 'read' | 'write' | 'all';
|
|
14
|
+
domains?: string[];
|
|
15
|
+
includeUi?: boolean;
|
|
16
|
+
/** Which API key the server runs with. Defaults to admin (a System key). */
|
|
17
|
+
role?: Role;
|
|
18
|
+
/** Register SENSITIVE_TOOL_NAMES (credential/token/impersonation tools). Defaults to false. */
|
|
19
|
+
allowSensitive?: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare function filterTools(registry: ToolRegistry, filter?: ScopeFilter): ToolDefinition[];
|
|
22
|
+
export declare function mountRegistryOnServer(server: McpServer, registry: ToolRegistry, auth: ApiKeyAuthAdapter, filter?: ScopeFilter): number;
|
|
23
|
+
/** ISCALE_MCP_ROLE: unset → admin; anything other than the three roles is an error. */
|
|
24
|
+
export declare function parseRole(value: string | undefined): Role;
|
|
25
|
+
/** ISCALE_MCP_ALLOW_SENSITIVE: only the exact string 'true' enables; anything else keeps them hidden. */
|
|
26
|
+
export declare function parseAllowSensitive(value: string | undefined): boolean;
|
|
27
|
+
/** Warning text when ISCALE_API_URL is neither https nor a local host. Never includes the URL itself. */
|
|
28
|
+
export declare function apiUrlWarning(value: string): string | null;
|
|
7
29
|
export declare function createServer(config: {
|
|
8
30
|
baseUrl: string;
|
|
9
31
|
apiKey: string;
|
|
32
|
+
filter?: ScopeFilter;
|
|
10
33
|
}): McpServer;
|
|
11
34
|
export declare function startServer(): Promise<void>;
|
|
12
35
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjE,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAE3D,eAAO,MAAM,KAAK,wCAAyC,CAAA;AAC3D,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzC,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,+FAA+F;IAC/F,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAE,WAAgB,GAAG,cAAc,EAAE,CAiB9F;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,iBAAiB,EACvB,MAAM,GAAE,WAAgB,GACvB,MAAM,CAuCR;AAOD,uFAAuF;AACvF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAIzD;AAED,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEtE;AAID,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU1D;AAQD,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,aASA;AAED,wBAAsB,WAAW,kBAmChC"}
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,117 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { ApiKeyAuthAdapter } from './auth-adapter.js';
|
|
5
|
+
import { buildRegistry } from './build-registry.js';
|
|
6
|
+
import { SENSITIVE_TOOL_NAMES } from './sensitive-tools.js';
|
|
5
7
|
export { ToolRegistry } from './registry.js';
|
|
6
8
|
export { SessionAuthAdapter, ApiKeyAuthAdapter } from './auth-adapter.js';
|
|
7
9
|
export { registerUiTools } from './tools/ui.js';
|
|
8
10
|
export { registerCompositeTools } from './tools/composite.js';
|
|
9
11
|
export { buildRegistry } from './build-registry.js';
|
|
12
|
+
export { SENSITIVE_TOOL_NAMES } from './sensitive-tools.js';
|
|
13
|
+
export const ROLES = ['admin', 'buyer', 'partner'];
|
|
14
|
+
export function filterTools(registry, filter = {}) {
|
|
15
|
+
const scope = filter.scope ?? 'all';
|
|
16
|
+
const includeUi = filter.includeUi ?? false;
|
|
17
|
+
const domains = filter.domains?.length ? new Set(filter.domains) : null;
|
|
18
|
+
const role = filter.role ?? 'admin';
|
|
19
|
+
const allowSensitive = filter.allowSensitive ?? false;
|
|
20
|
+
return registry.getAll().filter(tool => {
|
|
21
|
+
// A tool that declares no roles is admin-only, so it can never leak into a portal scope.
|
|
22
|
+
if (!(tool.metadata.allowedRoles ?? ['admin']).includes(role))
|
|
23
|
+
return false;
|
|
24
|
+
if (!allowSensitive && SENSITIVE_TOOL_NAMES.has(tool.name))
|
|
25
|
+
return false;
|
|
26
|
+
if (!includeUi && tool.metadata.domain === 'ui')
|
|
27
|
+
return false;
|
|
28
|
+
if (domains && !domains.has(tool.metadata.domain))
|
|
29
|
+
return false;
|
|
30
|
+
if (scope === 'read' && tool.metadata.isWrite)
|
|
31
|
+
return false;
|
|
32
|
+
if (scope === 'write' && !tool.metadata.isWrite)
|
|
33
|
+
return false;
|
|
34
|
+
return true;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export function mountRegistryOnServer(server, registry, auth, filter = {}) {
|
|
38
|
+
const tools = filterTools(registry, filter);
|
|
39
|
+
for (const tool of tools) {
|
|
40
|
+
const shape = tool.zodSchema instanceof z.ZodObject ? tool.zodSchema.shape : {};
|
|
41
|
+
const description = tool.metadata.confirmRequired && tool.metadata.isWrite
|
|
42
|
+
? `${tool.description}\n\n⚠️ Write operation — this mutates live data.`
|
|
43
|
+
: tool.description;
|
|
44
|
+
const annotations = {
|
|
45
|
+
readOnlyHint: !tool.metadata.isWrite,
|
|
46
|
+
destructiveHint: tool.metadata.isWrite && (tool.metadata.method === 'DELETE' || tool.metadata.confirmRequired),
|
|
47
|
+
idempotentHint: tool.metadata.method === 'GET' || tool.metadata.method === 'PUT' || tool.metadata.method === 'DELETE',
|
|
48
|
+
openWorldHint: true,
|
|
49
|
+
};
|
|
50
|
+
server.registerTool(tool.name, { description, inputSchema: shape, annotations }, async (args) => {
|
|
51
|
+
try {
|
|
52
|
+
const result = await tool.handler(args, auth);
|
|
53
|
+
const text = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
|
|
54
|
+
const isError = result !== null &&
|
|
55
|
+
typeof result === 'object' &&
|
|
56
|
+
'error' in result &&
|
|
57
|
+
result.error === true;
|
|
58
|
+
return { content: [{ type: 'text', text }], isError: isError || undefined };
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
62
|
+
return { content: [{ type: 'text', text: `Error: ${msg}` }], isError: true };
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return tools.length;
|
|
67
|
+
}
|
|
68
|
+
function parseScope(value) {
|
|
69
|
+
if (value === 'read' || value === 'write' || value === 'all')
|
|
70
|
+
return value;
|
|
71
|
+
return 'all';
|
|
72
|
+
}
|
|
73
|
+
/** ISCALE_MCP_ROLE: unset → admin; anything other than the three roles is an error. */
|
|
74
|
+
export function parseRole(value) {
|
|
75
|
+
if (value === undefined)
|
|
76
|
+
return 'admin';
|
|
77
|
+
if (ROLES.includes(value))
|
|
78
|
+
return value;
|
|
79
|
+
throw new Error(`Invalid ISCALE_MCP_ROLE ${JSON.stringify(value)}. Valid values: ${ROLES.join(', ')}.`);
|
|
80
|
+
}
|
|
81
|
+
/** ISCALE_MCP_ALLOW_SENSITIVE: only the exact string 'true' enables; anything else keeps them hidden. */
|
|
82
|
+
export function parseAllowSensitive(value) {
|
|
83
|
+
return value === 'true';
|
|
84
|
+
}
|
|
85
|
+
const LOCAL_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);
|
|
86
|
+
/** Warning text when ISCALE_API_URL is neither https nor a local host. Never includes the URL itself. */
|
|
87
|
+
export function apiUrlWarning(value) {
|
|
88
|
+
let url;
|
|
89
|
+
try {
|
|
90
|
+
url = new URL(value);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return 'Warning: ISCALE_API_URL is not a valid URL.';
|
|
94
|
+
}
|
|
95
|
+
if (url.protocol === 'https:')
|
|
96
|
+
return null;
|
|
97
|
+
if (url.protocol === 'http:' && LOCAL_HOSTS.has(url.hostname))
|
|
98
|
+
return null;
|
|
99
|
+
return 'Warning: ISCALE_API_URL is not https; the API key will be sent unencrypted. Use an https:// URL.';
|
|
100
|
+
}
|
|
101
|
+
function parseDomains(value) {
|
|
102
|
+
if (!value)
|
|
103
|
+
return undefined;
|
|
104
|
+
const list = value.split(',').map(s => s.trim()).filter(Boolean);
|
|
105
|
+
return list.length ? list : undefined;
|
|
106
|
+
}
|
|
10
107
|
export function createServer(config) {
|
|
11
108
|
const server = new McpServer({
|
|
12
109
|
name: 'iscale-lead-routing',
|
|
13
|
-
version: '0.1
|
|
110
|
+
version: '0.3.1',
|
|
14
111
|
});
|
|
15
|
-
const
|
|
16
|
-
|
|
112
|
+
const auth = new ApiKeyAuthAdapter(config.apiKey, config.baseUrl);
|
|
113
|
+
const registry = buildRegistry();
|
|
114
|
+
mountRegistryOnServer(server, registry, auth, config.filter);
|
|
17
115
|
return server;
|
|
18
116
|
}
|
|
19
117
|
export async function startServer() {
|
|
@@ -27,7 +125,25 @@ export async function startServer() {
|
|
|
27
125
|
console.error('ISCALE_API_KEY environment variable is required');
|
|
28
126
|
process.exit(1);
|
|
29
127
|
}
|
|
30
|
-
const
|
|
128
|
+
const urlWarning = apiUrlWarning(baseUrl);
|
|
129
|
+
if (urlWarning)
|
|
130
|
+
console.error(urlWarning);
|
|
131
|
+
let role;
|
|
132
|
+
try {
|
|
133
|
+
role = parseRole(process.env.ISCALE_MCP_ROLE);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
const filter = {
|
|
140
|
+
role,
|
|
141
|
+
scope: parseScope(process.env.ISCALE_MCP_SCOPE),
|
|
142
|
+
domains: parseDomains(process.env.ISCALE_MCP_DOMAINS),
|
|
143
|
+
includeUi: process.env.ISCALE_MCP_INCLUDE_UI === 'true',
|
|
144
|
+
allowSensitive: parseAllowSensitive(process.env.ISCALE_MCP_ALLOW_SENSITIVE),
|
|
145
|
+
};
|
|
146
|
+
const server = createServer({ baseUrl, apiKey, filter });
|
|
31
147
|
const transport = new StdioServerTransport();
|
|
32
148
|
await server.connect(transport);
|
|
33
149
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|