@carrierllc/mcp 0.2.2 → 0.2.4

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/dist/index.js CHANGED
@@ -74,6 +74,9 @@ async function checkCallQuota(env, sub, tier) {
74
74
  if (tier === "enterprise") {
75
75
  return { allowed: true, remaining: Infinity, resetAt, tier };
76
76
  }
77
+ if (!env.CARRIER_USERS) {
78
+ return { allowed: true, remaining: Infinity, resetAt, tier };
79
+ }
77
80
  const month = currentMonth();
78
81
  const usageKey = `usage:${sub}:${month}`;
79
82
  const raw = await env.CARRIER_USERS.get(usageKey, "json").catch(() => null);
@@ -87,6 +90,7 @@ async function checkCallQuota(env, sub, tier) {
87
90
  };
88
91
  }
89
92
  function recordUsage(env, sub, tier) {
93
+ if (!env.CARRIER_USERS) return;
90
94
  (async () => {
91
95
  const month = currentMonth();
92
96
  const usageKey = `usage:${sub}:${month}`;
@@ -107,6 +111,7 @@ function recordUsage(env, sub, tier) {
107
111
  async function pushStripeUsageRecord(env, sub, quantity) {
108
112
  const stripeKey = env.STRIPE_SECRET_KEY;
109
113
  if (!stripeKey) return;
114
+ if (!env.CARRIER_USERS) return;
110
115
  const subItemId = await env.CARRIER_USERS.get(`stripe_sub_item_id:${sub}`);
111
116
  if (!subItemId) return;
112
117
  const body = new URLSearchParams({
@@ -1475,6 +1480,979 @@ function registerAllTools(server2, ctx) {
1475
1480
  // src/intelligence.ts
1476
1481
  import { z as z2 } from "zod";
1477
1482
 
1483
+ // ../../packages/ocs-spec/ocs-methods.json
1484
+ var ocs_methods_default = {
1485
+ version: "1.0.0",
1486
+ captured_at: "2026-05-10T20:55:08.779899+00:00",
1487
+ sources: {
1488
+ live_docs_url: "https://docs.esimvault.cloud/ocs-api",
1489
+ server_source_repo: "auroracapital/esimmcp.com",
1490
+ server_source_commit: "8793971",
1491
+ server_source_branch: "feat/intelligence-tools@e200c42 merged to main via restore-mcp-to-main PR#31",
1492
+ notes: "Live docs SPA rendered via Kapture (2026-05-10). Server is a strict subset of live docs (43/52 methods). Zero server\u2192live drift confirmed. 9 live-only methods are v1.1 backlog."
1493
+ },
1494
+ v1_methods: [
1495
+ {
1496
+ name: "list_reseller_accounts",
1497
+ ocs_method: "listResellerAccount",
1498
+ category: "reseller",
1499
+ scope: "read",
1500
+ description: "List all accounts across all resellers",
1501
+ params: {
1502
+ resellerId: { type: "number", required: false }
1503
+ },
1504
+ response: {},
1505
+ annotations: "readOnlyHint",
1506
+ verified_against_server: true,
1507
+ verified_against_live_docs: true
1508
+ },
1509
+ {
1510
+ name: "get_reseller_info",
1511
+ ocs_method: "getResellerInfo",
1512
+ category: "reseller",
1513
+ scope: "read",
1514
+ description: "Retrieve reseller details",
1515
+ params: {
1516
+ resellerId: { type: "number", required: false }
1517
+ },
1518
+ response: {},
1519
+ annotations: "readOnlyHint",
1520
+ verified_against_server: true,
1521
+ verified_against_live_docs: true
1522
+ },
1523
+ {
1524
+ name: "esim_status_per_account",
1525
+ ocs_method: "esimStatusPerAccount",
1526
+ category: "reseller",
1527
+ scope: "read",
1528
+ description: "eSIM status breakdown per account",
1529
+ params: {
1530
+ accountId: { type: "number", required: false }
1531
+ },
1532
+ response: {},
1533
+ annotations: "readOnlyHint",
1534
+ verified_against_server: true,
1535
+ verified_against_live_docs: true
1536
+ },
1537
+ {
1538
+ name: "list_sponsors",
1539
+ ocs_method: "listSponsor",
1540
+ category: "reseller",
1541
+ scope: "read",
1542
+ description: "List all sponsor networks",
1543
+ params: {},
1544
+ response: {},
1545
+ annotations: "readOnlyHint",
1546
+ verified_against_server: true,
1547
+ verified_against_live_docs: true
1548
+ },
1549
+ {
1550
+ name: "list_steering_lists",
1551
+ ocs_method: "listSteeringList",
1552
+ category: "reseller",
1553
+ scope: "read",
1554
+ description: "List all network steering lists",
1555
+ params: {},
1556
+ response: {},
1557
+ annotations: "readOnlyHint",
1558
+ verified_against_server: true,
1559
+ verified_against_live_docs: true
1560
+ },
1561
+ {
1562
+ name: "modify_account_balance",
1563
+ ocs_method: "modifyAccountBalance",
1564
+ category: "reseller",
1565
+ scope: "admin",
1566
+ description: "Adjust or set reseller account balance",
1567
+ params: {
1568
+ accountId: { type: "number", required: true },
1569
+ amount: { type: "number", required: true },
1570
+ mode: { type: "enum[adapt,set]", required: true }
1571
+ },
1572
+ response: {},
1573
+ annotations: "destructiveHint",
1574
+ verified_against_server: true,
1575
+ verified_against_live_docs: true
1576
+ },
1577
+ {
1578
+ name: "get_subscriber",
1579
+ ocs_method: "getSingleSubscriber",
1580
+ category: "subscriber",
1581
+ scope: "read",
1582
+ description: "Get full subscriber details by ICCID or MSISDN",
1583
+ params: {
1584
+ iccid: { type: "string", required: false },
1585
+ msisdn: { type: "string", required: false },
1586
+ with_gz_counter: { type: "boolean", required: false, ocs_field: "withGzCounter", description: "When true, include greenZoneCounter { subscriberId, volumeOnGZ (bytes), lastResetDate, lastUpdateDate } in response" }
1587
+ },
1588
+ response: {
1589
+ greenZoneCounter: { type: "object", present_when: "with_gz_counter=true", fields: { subscriberId: "number", volumeOnGZ: "number (bytes)", lastResetDate: "string (ISO8601)", lastUpdateDate: "string (ISO8601)" } }
1590
+ },
1591
+ annotations: "readOnlyHint",
1592
+ verified_against_server: true,
1593
+ verified_against_live_docs: true
1594
+ },
1595
+ {
1596
+ name: "list_subscribers",
1597
+ ocs_method: "listSubscriber",
1598
+ category: "subscriber",
1599
+ scope: "read",
1600
+ description: "List subscribers with optional filters",
1601
+ params: {
1602
+ accountId: { type: "number", required: false },
1603
+ status: { type: "string", required: false },
1604
+ offset: { type: "number", required: false },
1605
+ limit: { type: "number", required: false }
1606
+ },
1607
+ response: {},
1608
+ annotations: "readOnlyHint",
1609
+ verified_against_server: true,
1610
+ verified_against_live_docs: true
1611
+ },
1612
+ {
1613
+ name: "modify_subscriber_balance",
1614
+ ocs_method: "modifySubscriberBalance",
1615
+ category: "subscriber",
1616
+ scope: "write",
1617
+ description: "Adjust or set subscriber balance",
1618
+ params: {
1619
+ iccid: { type: "string", required: true },
1620
+ amount: { type: "number", required: true },
1621
+ mode: { type: "enum[adapt,set]", required: true }
1622
+ },
1623
+ response: {},
1624
+ annotations: "destructiveHint",
1625
+ verified_against_server: true,
1626
+ verified_against_live_docs: true
1627
+ },
1628
+ {
1629
+ name: "modify_subscriber_status",
1630
+ ocs_method: "modifySubscriberStatus",
1631
+ category: "subscriber",
1632
+ scope: "write",
1633
+ description: "Change subscriber OCS status",
1634
+ params: {
1635
+ iccid: { type: "string", required: true },
1636
+ status: { type: "string", required: true }
1637
+ },
1638
+ response: {},
1639
+ annotations: "destructiveHint",
1640
+ verified_against_server: true,
1641
+ verified_against_live_docs: true
1642
+ },
1643
+ {
1644
+ name: "change_sim_status",
1645
+ ocs_method: "changeSimStatus",
1646
+ category: "subscriber",
1647
+ scope: "write",
1648
+ description: "Change SIM status at provider level",
1649
+ params: {
1650
+ iccid: { type: "string", required: true },
1651
+ simStatus: { type: "string", required: true }
1652
+ },
1653
+ response: {},
1654
+ annotations: "destructiveHint",
1655
+ verified_against_server: true,
1656
+ verified_against_live_docs: true
1657
+ },
1658
+ {
1659
+ name: "get_sim_provider_status",
1660
+ ocs_method: "getSimProviderStatus",
1661
+ category: "subscriber",
1662
+ scope: "read",
1663
+ description: "Check SIM provider-level status",
1664
+ params: {
1665
+ iccid: { type: "string", required: true }
1666
+ },
1667
+ response: {},
1668
+ annotations: "readOnlyHint",
1669
+ verified_against_server: true,
1670
+ verified_against_live_docs: true
1671
+ },
1672
+ {
1673
+ name: "get_subscriber_location",
1674
+ ocs_method: "getSubscriberLocation",
1675
+ category: "subscriber",
1676
+ scope: "read",
1677
+ description: "Get last known subscriber location",
1678
+ params: {
1679
+ iccid: { type: "string", required: true }
1680
+ },
1681
+ response: {},
1682
+ annotations: "readOnlyHint",
1683
+ verified_against_server: true,
1684
+ verified_against_live_docs: true
1685
+ },
1686
+ {
1687
+ name: "modify_subscriber_contact_info",
1688
+ ocs_method: "modifySubscriberContactInfo",
1689
+ category: "subscriber",
1690
+ scope: "write",
1691
+ description: "Update subscriber contact info",
1692
+ params: {
1693
+ iccid: { type: "string", required: true },
1694
+ firstName: { type: "string", required: false },
1695
+ lastName: { type: "string", required: false },
1696
+ email: { type: "string", required: false },
1697
+ phoneNumber: { type: "string", required: false }
1698
+ },
1699
+ response: {},
1700
+ annotations: "destructiveHint",
1701
+ verified_against_server: true,
1702
+ verified_against_live_docs: true
1703
+ },
1704
+ {
1705
+ name: "set_subscriber_traffic_restrictions",
1706
+ ocs_method: "setSubscriberTrafficRestrictions",
1707
+ category: "subscriber",
1708
+ scope: "write",
1709
+ description: "Configure traffic restrictions for a subscriber",
1710
+ params: {
1711
+ iccid: { type: "string", required: true },
1712
+ restrictions: { type: "string(JSON)", required: true }
1713
+ },
1714
+ response: {},
1715
+ annotations: "destructiveHint",
1716
+ verified_against_server: true,
1717
+ verified_against_live_docs: true
1718
+ },
1719
+ {
1720
+ name: "modify_subscriber_steering_list",
1721
+ ocs_method: "modifySubscriberSteeringList",
1722
+ category: "subscriber",
1723
+ scope: "write",
1724
+ description: "Change network steering list for a subscriber",
1725
+ params: {
1726
+ iccid: { type: "string", required: true },
1727
+ steeringListId: { type: "number", required: true }
1728
+ },
1729
+ response: {},
1730
+ annotations: "destructiveHint",
1731
+ verified_against_server: true,
1732
+ verified_against_live_docs: true
1733
+ },
1734
+ {
1735
+ name: "move_subscriber_range_to_account",
1736
+ ocs_method: "moveSubscriberRangeToAccount",
1737
+ category: "subscriber",
1738
+ scope: "admin",
1739
+ description: "Move subscriber range to another account",
1740
+ params: {
1741
+ iccidFrom: { type: "string", required: true },
1742
+ iccidTo: { type: "string", required: true },
1743
+ accountId: { type: "number", required: true }
1744
+ },
1745
+ response: {},
1746
+ annotations: "destructiveHint",
1747
+ verified_against_server: true,
1748
+ verified_against_live_docs: true
1749
+ },
1750
+ {
1751
+ name: "hlr_set_bitrate",
1752
+ ocs_method: "hlrSetBitrate",
1753
+ category: "subscriber",
1754
+ scope: "write",
1755
+ description: "Set HLR bitrate for a subscriber",
1756
+ params: {
1757
+ iccid: { type: "string", required: true },
1758
+ bitrate: { type: "number", required: true }
1759
+ },
1760
+ response: {},
1761
+ annotations: "destructiveHint",
1762
+ verified_against_server: true,
1763
+ verified_against_live_docs: true
1764
+ },
1765
+ {
1766
+ name: "hlr_get_bitrate",
1767
+ ocs_method: "hlrGetBitrate",
1768
+ category: "subscriber",
1769
+ scope: "read",
1770
+ description: "Get HLR bitrate for a subscriber",
1771
+ params: {
1772
+ iccid: { type: "string", required: true }
1773
+ },
1774
+ response: {},
1775
+ annotations: "readOnlyHint",
1776
+ verified_against_server: true,
1777
+ verified_against_live_docs: true
1778
+ },
1779
+ {
1780
+ name: "list_subscriber_packages",
1781
+ ocs_method: "listSubscriberPrepaidPackages",
1782
+ category: "packages",
1783
+ scope: "read",
1784
+ description: "List all prepaid packages assigned to a subscriber",
1785
+ params: {
1786
+ iccid: { type: "string", required: true }
1787
+ },
1788
+ response: {},
1789
+ annotations: "readOnlyHint",
1790
+ verified_against_server: true,
1791
+ verified_against_live_docs: true
1792
+ },
1793
+ {
1794
+ name: "assign_package",
1795
+ ocs_method: "affectPackageToSubscriber",
1796
+ category: "packages",
1797
+ scope: "write",
1798
+ description: "Assign prepaid package template to subscriber",
1799
+ params: {
1800
+ iccid: { type: "string", required: true },
1801
+ packageTemplateId: { type: "number", required: true }
1802
+ },
1803
+ response: {},
1804
+ annotations: "destructiveHint",
1805
+ verified_against_server: true,
1806
+ verified_against_live_docs: true
1807
+ },
1808
+ {
1809
+ name: "assign_recurring_package",
1810
+ ocs_method: "affectRecurringPackageToSubscriber",
1811
+ category: "packages",
1812
+ scope: "write",
1813
+ description: "Assign recurring prepaid package to subscriber",
1814
+ params: {
1815
+ iccid: { type: "string", required: true },
1816
+ packageTemplateId: { type: "number", required: true }
1817
+ },
1818
+ response: {},
1819
+ annotations: "destructiveHint",
1820
+ verified_against_server: true,
1821
+ verified_against_live_docs: true
1822
+ },
1823
+ {
1824
+ name: "modify_package_limits",
1825
+ ocs_method: "modifySubscriberPrepaidPackageLimits",
1826
+ category: "packages",
1827
+ scope: "write",
1828
+ description: "Change data/voice/SMS limits on active package",
1829
+ params: {
1830
+ iccid: { type: "string", required: true },
1831
+ packageId: { type: "number", required: true },
1832
+ limits: { type: "string(JSON)", required: true }
1833
+ },
1834
+ response: {},
1835
+ annotations: "destructiveHint",
1836
+ verified_against_server: true,
1837
+ verified_against_live_docs: true
1838
+ },
1839
+ {
1840
+ name: "modify_package_expiry",
1841
+ ocs_method: "modifySubscriberPrepaidPackageExpDate",
1842
+ category: "packages",
1843
+ scope: "write",
1844
+ description: "Change expiration date of active package",
1845
+ params: {
1846
+ iccid: { type: "string", required: true },
1847
+ packageId: { type: "number", required: true },
1848
+ expirationDate: { type: "string(ISO8601)", required: true }
1849
+ },
1850
+ response: {},
1851
+ annotations: "destructiveHint",
1852
+ verified_against_server: true,
1853
+ verified_against_live_docs: true
1854
+ },
1855
+ {
1856
+ name: "modify_package_status",
1857
+ ocs_method: "modifySubscriberPrepaidPackageStatus",
1858
+ category: "packages",
1859
+ scope: "write",
1860
+ description: "Activate or deactivate a subscriber package",
1861
+ params: {
1862
+ iccid: { type: "string", required: true },
1863
+ packageId: { type: "number", required: true },
1864
+ status: { type: "string", required: true }
1865
+ },
1866
+ response: {},
1867
+ annotations: "destructiveHint",
1868
+ verified_against_server: true,
1869
+ verified_against_live_docs: true
1870
+ },
1871
+ {
1872
+ name: "stop_resume_recurring_package",
1873
+ ocs_method: "stopResumeSubsRecurringPackage",
1874
+ category: "packages",
1875
+ scope: "write",
1876
+ description: "Stop or resume recurring package auto-renewal",
1877
+ params: {
1878
+ iccid: { type: "string", required: true },
1879
+ packageId: { type: "number", required: true },
1880
+ action: { type: "enum[stop,resume]", required: true }
1881
+ },
1882
+ response: {},
1883
+ annotations: "destructiveHint",
1884
+ verified_against_server: true,
1885
+ verified_against_live_docs: true
1886
+ },
1887
+ {
1888
+ name: "delete_subscriber_package",
1889
+ ocs_method: "deleteSubscriberPackage",
1890
+ category: "packages",
1891
+ scope: "admin",
1892
+ description: "Remove a package from a subscriber",
1893
+ params: {
1894
+ iccid: { type: "string", required: true },
1895
+ packageId: { type: "number", required: true }
1896
+ },
1897
+ response: {},
1898
+ annotations: "destructiveHint",
1899
+ verified_against_server: true,
1900
+ verified_against_live_docs: true
1901
+ },
1902
+ {
1903
+ name: "clean_all_packages",
1904
+ ocs_method: "cleanSubscriberAllPackages",
1905
+ category: "packages",
1906
+ scope: "admin",
1907
+ description: "Remove ALL packages from a subscriber",
1908
+ params: {
1909
+ iccid: { type: "string", required: true }
1910
+ },
1911
+ response: {},
1912
+ annotations: "destructiveHint",
1913
+ verified_against_server: true,
1914
+ verified_against_live_docs: true
1915
+ },
1916
+ {
1917
+ name: "list_package_templates",
1918
+ ocs_method: "listPrepaidPackageTemplate",
1919
+ category: "templates",
1920
+ scope: "read",
1921
+ description: "List all prepaid package templates",
1922
+ params: {
1923
+ accountId: { type: "number", required: false }
1924
+ },
1925
+ response: {},
1926
+ annotations: "readOnlyHint",
1927
+ verified_against_server: true,
1928
+ verified_against_live_docs: true
1929
+ },
1930
+ {
1931
+ name: "create_package_template",
1932
+ ocs_method: "createPrepaidPackageTemplate",
1933
+ category: "templates",
1934
+ scope: "admin",
1935
+ description: "Create a new prepaid package template",
1936
+ params: {
1937
+ template: { type: "string(JSON)", required: true }
1938
+ },
1939
+ response: {},
1940
+ annotations: "destructiveHint",
1941
+ verified_against_server: true,
1942
+ verified_against_live_docs: true
1943
+ },
1944
+ {
1945
+ name: "modify_template_core",
1946
+ ocs_method: "modifyPPTCore",
1947
+ category: "templates",
1948
+ scope: "admin",
1949
+ description: "Modify core settings of a package template",
1950
+ params: {
1951
+ templateId: { type: "number", required: true },
1952
+ changes: { type: "string(JSON)", required: true }
1953
+ },
1954
+ response: {},
1955
+ annotations: "destructiveHint",
1956
+ verified_against_server: true,
1957
+ verified_against_live_docs: true
1958
+ },
1959
+ {
1960
+ name: "modify_template_recurring",
1961
+ ocs_method: "modifyPPTRecurring",
1962
+ category: "templates",
1963
+ scope: "admin",
1964
+ description: "Modify recurring settings of a package template",
1965
+ params: {
1966
+ templateId: { type: "number", required: true },
1967
+ changes: { type: "string(JSON)", required: true }
1968
+ },
1969
+ response: {},
1970
+ annotations: "destructiveHint",
1971
+ verified_against_server: true,
1972
+ verified_against_live_docs: true
1973
+ },
1974
+ {
1975
+ name: "modify_template_throttling",
1976
+ ocs_method: "modifyPPTThrottling",
1977
+ category: "templates",
1978
+ scope: "admin",
1979
+ description: "Modify throttling settings of a package template",
1980
+ params: {
1981
+ templateId: { type: "number", required: true },
1982
+ changes: { type: "string(JSON)", required: true }
1983
+ },
1984
+ response: {},
1985
+ annotations: "destructiveHint",
1986
+ verified_against_server: true,
1987
+ verified_against_live_docs: true
1988
+ },
1989
+ {
1990
+ name: "list_location_zones",
1991
+ ocs_method: "listLocationZoneElement",
1992
+ category: "templates",
1993
+ scope: "read",
1994
+ description: "List countries/networks in a location zone",
1995
+ params: {
1996
+ locationZoneId: { type: "number", required: false }
1997
+ },
1998
+ response: {},
1999
+ annotations: "readOnlyHint",
2000
+ verified_against_server: true,
2001
+ verified_against_live_docs: true
2002
+ },
2003
+ {
2004
+ name: "list_detailed_location_zones",
2005
+ ocs_method: "listDetailedLocationZone",
2006
+ category: "templates",
2007
+ scope: "read",
2008
+ description: "Get detailed location zone definitions",
2009
+ params: {},
2010
+ response: {},
2011
+ annotations: "readOnlyHint",
2012
+ verified_against_server: true,
2013
+ verified_against_live_docs: true
2014
+ },
2015
+ {
2016
+ name: "list_destination_prefixes",
2017
+ ocs_method: "listDestinationListPrefix",
2018
+ category: "templates",
2019
+ scope: "read",
2020
+ description: "List phone number prefixes in destination lists",
2021
+ params: {
2022
+ destinationListId: { type: "number", required: false }
2023
+ },
2024
+ response: {},
2025
+ annotations: "readOnlyHint",
2026
+ verified_against_server: true,
2027
+ verified_against_live_docs: true
2028
+ },
2029
+ {
2030
+ name: "create_location_zone",
2031
+ ocs_method: "createLocationZone",
2032
+ category: "templates",
2033
+ scope: "admin",
2034
+ description: "Create a new location zone",
2035
+ params: {
2036
+ zone: { type: "string(JSON)", required: true }
2037
+ },
2038
+ response: {},
2039
+ annotations: "destructiveHint",
2040
+ verified_against_server: true,
2041
+ verified_against_live_docs: true
2042
+ },
2043
+ {
2044
+ name: "subscriber_usage",
2045
+ ocs_method: "subscriberUsageOverPeriod",
2046
+ category: "statistics",
2047
+ scope: "read",
2048
+ description: "Get daily usage for a subscriber (max 7 days)",
2049
+ params: {
2050
+ iccid: { type: "string", required: true },
2051
+ startDate: { type: "string(YYYY-MM-DD)", required: true },
2052
+ endDate: { type: "string(YYYY-MM-DD)", required: true }
2053
+ },
2054
+ response: {},
2055
+ annotations: "readOnlyHint",
2056
+ verified_against_server: true,
2057
+ verified_against_live_docs: true
2058
+ },
2059
+ {
2060
+ name: "subscriber_network_events",
2061
+ ocs_method: "subscriberNetworkEventsOverPeriod",
2062
+ category: "statistics",
2063
+ scope: "read",
2064
+ description: "Get network events for a subscriber (max 7 days)",
2065
+ params: {
2066
+ iccid: { type: "string", required: true },
2067
+ startDate: { type: "string(YYYY-MM-DD)", required: true },
2068
+ endDate: { type: "string(YYYY-MM-DD)", required: true }
2069
+ },
2070
+ response: {},
2071
+ annotations: "readOnlyHint",
2072
+ verified_against_server: true,
2073
+ verified_against_live_docs: true
2074
+ },
2075
+ {
2076
+ name: "subscriber_active_period",
2077
+ ocs_method: "getSubscriberActivePeriod",
2078
+ category: "statistics",
2079
+ scope: "read",
2080
+ description: "Get subscriber active period",
2081
+ params: {
2082
+ iccid: { type: "string", required: true }
2083
+ },
2084
+ response: {},
2085
+ annotations: "readOnlyHint",
2086
+ verified_against_server: true,
2087
+ verified_against_live_docs: true
2088
+ },
2089
+ {
2090
+ name: "get_tariff",
2091
+ ocs_method: "getCustomerTariff",
2092
+ category: "tariff",
2093
+ scope: "read",
2094
+ description: "Retrieve customer tariff/pricing table",
2095
+ params: {},
2096
+ response: {},
2097
+ annotations: "readOnlyHint",
2098
+ verified_against_server: true,
2099
+ verified_against_live_docs: true
2100
+ },
2101
+ {
2102
+ name: "send_sms",
2103
+ ocs_method: "sendMtSms",
2104
+ category: "messaging",
2105
+ scope: "write",
2106
+ description: "Send MT SMS to a subscriber",
2107
+ params: {
2108
+ iccid: { type: "string", required: true },
2109
+ msisdn: { type: "string", required: true },
2110
+ message: { type: "string", required: true },
2111
+ sender: { type: "string", required: false }
2112
+ },
2113
+ response: {},
2114
+ annotations: "destructiveHint",
2115
+ verified_against_server: true,
2116
+ verified_against_live_docs: true
2117
+ },
2118
+ {
2119
+ name: "list_network_profiles",
2120
+ ocs_method: "listNetworkProfile",
2121
+ category: "network",
2122
+ scope: "read",
2123
+ description: "List all available network profiles",
2124
+ params: {},
2125
+ response: {},
2126
+ annotations: "readOnlyHint",
2127
+ verified_against_server: true,
2128
+ verified_against_live_docs: true
2129
+ }
2130
+ ],
2131
+ v1_intelligence_methods: [
2132
+ {
2133
+ name: "diagnose_subscriber",
2134
+ category: "intelligence",
2135
+ scope: "read",
2136
+ description: "AI diagnostic: chains 5 OCS calls to diagnose connectivity issues",
2137
+ wraps: ["getSingleSubscriber", "getSimProviderStatus", "listSubscriberPrepaidPackages", "subscriberNetworkEventsOverPeriod", "hlrGetBitrate"],
2138
+ params: {
2139
+ iccid: { type: "string", required: true },
2140
+ startDate: { type: "string(YYYY-MM-DD)", required: false },
2141
+ endDate: { type: "string(YYYY-MM-DD)", required: false }
2142
+ },
2143
+ verified_against_server: true,
2144
+ verified_against_live_docs: false
2145
+ },
2146
+ {
2147
+ name: "fleet_health",
2148
+ category: "intelligence",
2149
+ scope: "read",
2150
+ description: "Single-call fleet overview: accounts, eSIM counts, low-balance alerts",
2151
+ wraps: ["listResellerAccount", "esimStatusPerAccount", "listSubscriberPrepaidPackages"],
2152
+ params: {},
2153
+ verified_against_server: true,
2154
+ verified_against_live_docs: false
2155
+ },
2156
+ {
2157
+ name: "detect_usage_anomalies",
2158
+ category: "intelligence",
2159
+ scope: "read",
2160
+ description: "Detect abnormal usage patterns across subscribers",
2161
+ wraps: ["listSubscriber", "subscriberUsageOverPeriod"],
2162
+ params: {
2163
+ startDate: { type: "string(YYYY-MM-DD)", required: true },
2164
+ endDate: { type: "string(YYYY-MM-DD)", required: true },
2165
+ accountId: { type: "number", required: false }
2166
+ },
2167
+ verified_against_server: true,
2168
+ verified_against_live_docs: false
2169
+ },
2170
+ {
2171
+ name: "optimize_package",
2172
+ category: "intelligence",
2173
+ scope: "read",
2174
+ description: "Package optimization: match subscriber usage to best template",
2175
+ wraps: ["getSingleSubscriber", "listSubscriberPrepaidPackages", "subscriberUsageOverPeriod", "listPrepaidPackageTemplate"],
2176
+ params: {
2177
+ iccid: { type: "string", required: true },
2178
+ startDate: { type: "string(YYYY-MM-DD)", required: false },
2179
+ endDate: { type: "string(YYYY-MM-DD)", required: false }
2180
+ },
2181
+ verified_against_server: true,
2182
+ verified_against_live_docs: false
2183
+ },
2184
+ {
2185
+ name: "churn_risk",
2186
+ category: "intelligence",
2187
+ scope: "read",
2188
+ description: "Identify subscribers at risk of churn based on usage patterns",
2189
+ wraps: ["listSubscriber", "subscriberUsageOverPeriod", "getSubscriberActivePeriod"],
2190
+ params: {
2191
+ startDate: { type: "string(YYYY-MM-DD)", required: true },
2192
+ endDate: { type: "string(YYYY-MM-DD)", required: true },
2193
+ accountId: { type: "number", required: false }
2194
+ },
2195
+ verified_against_server: true,
2196
+ verified_against_live_docs: false
2197
+ },
2198
+ {
2199
+ name: "audit_network_coverage",
2200
+ category: "intelligence",
2201
+ scope: "read",
2202
+ description: "Audit network coverage and steering effectiveness",
2203
+ wraps: ["listDetailedLocationZone", "listSteeringList", "getSubscriberLocation"],
2204
+ params: {
2205
+ iccid: { type: "string", required: false }
2206
+ },
2207
+ verified_against_server: true,
2208
+ verified_against_live_docs: false
2209
+ },
2210
+ {
2211
+ name: "marketing_intelligence",
2212
+ category: "intelligence",
2213
+ scope: "read",
2214
+ description: "Marketing insights: segment analysis, upsell opportunities",
2215
+ wraps: ["listResellerAccount", "esimStatusPerAccount", "listPrepaidPackageTemplate", "subscriberUsageOverPeriod"],
2216
+ params: {
2217
+ startDate: { type: "string(YYYY-MM-DD)", required: true },
2218
+ endDate: { type: "string(YYYY-MM-DD)", required: true }
2219
+ },
2220
+ verified_against_server: true,
2221
+ verified_against_live_docs: false
2222
+ },
2223
+ {
2224
+ name: "high_cost_subscribers",
2225
+ category: "intelligence",
2226
+ scope: "read",
2227
+ description: "Identify highest-cost subscribers for cost optimization",
2228
+ wraps: ["listSubscriber", "subscriberUsageOverPeriod", "getCustomerTariff"],
2229
+ params: {
2230
+ startDate: { type: "string(YYYY-MM-DD)", required: true },
2231
+ endDate: { type: "string(YYYY-MM-DD)", required: true },
2232
+ accountId: { type: "number", required: false }
2233
+ },
2234
+ verified_against_server: true,
2235
+ verified_against_live_docs: false
2236
+ }
2237
+ ],
2238
+ v1_1_backlog: [
2239
+ {
2240
+ name: "affect_subscriber_phone_number",
2241
+ ocs_method: "affectSubscriberFakePhoneNumber / affectSubscriberRealPhoneNumber",
2242
+ category: "subscriber",
2243
+ scope: "write",
2244
+ status: "implemented",
2245
+ description: "Assign a fake or real MSISDN to a subscriber \u2014 single MCP tool wraps both OCS methods via phone_type param",
2246
+ params: {
2247
+ iccid: { type: "string", required: true },
2248
+ phone_number: { type: "string(E.164)", required: true },
2249
+ phone_type: { type: "enum[fake,real]", required: true }
2250
+ },
2251
+ annotations: "destructiveHint",
2252
+ verified_against_server: true,
2253
+ verified_against_live_docs: true
2254
+ },
2255
+ {
2256
+ name: "get_subscriber_location_by_cell_id",
2257
+ ocs_method: "getSubscriberLocationByCellId",
2258
+ category: "subscriber",
2259
+ scope: "read",
2260
+ status: "implemented",
2261
+ description: "Resolve a cell tower tuple (radioType + MCC + MNC + LAC + optional cellId) to lat/lon via Bridge4IP GeoSense. No subscriber identifier required \u2014 caller supplies cell params directly.",
2262
+ params: {
2263
+ radio_type: { type: "enum[2G,3G,4G,5G,NB-IoT]", required: true },
2264
+ mcc: { type: "integer", required: true },
2265
+ mnc: { type: "integer", required: true },
2266
+ lac: { type: "integer", required: true },
2267
+ cell_id: { type: "integer", required: false },
2268
+ signal_strength: { type: "number", required: false }
2269
+ },
2270
+ response: {
2271
+ latitude: { type: "number" },
2272
+ longitude: { type: "number" },
2273
+ accuracy: { type: "integer", notes: "median error in meters at 50% confidence" }
2274
+ },
2275
+ annotations: "readOnlyHint",
2276
+ verified_against_server: true,
2277
+ verified_against_live_docs: true
2278
+ },
2279
+ {
2280
+ name: "list_destination_lists",
2281
+ ocs_method: "listDetailedDestinationList",
2282
+ category: "templates",
2283
+ scope: "read",
2284
+ status: "implemented",
2285
+ description: "List all destination lists with full detail (prefix sets for voice/SMS routing control)",
2286
+ params: {},
2287
+ annotations: "readOnlyHint",
2288
+ verified_against_server: true,
2289
+ verified_against_live_docs: true
2290
+ },
2291
+ {
2292
+ name: "modify_subscriber_mobile_plan",
2293
+ ocs_method: "modifySubscriberMobilePlan",
2294
+ category: "subscriber",
2295
+ scope: "write",
2296
+ status: "implemented",
2297
+ description: "Change the mobile plan assigned to a subscriber",
2298
+ params: {
2299
+ iccid: { type: "string", required: true },
2300
+ mobile_plan_id: { type: "number", required: true }
2301
+ },
2302
+ annotations: "destructiveHint",
2303
+ verified_against_server: true,
2304
+ verified_against_live_docs: true
2305
+ },
2306
+ {
2307
+ name: "modify_subscriber_package_active_period",
2308
+ ocs_method: "modifySubscriberPrepaidPackageActivePeriod",
2309
+ category: "packages",
2310
+ scope: "write",
2311
+ status: "implemented",
2312
+ description: "Change the active period (start/end dates) of a prepaid package on a subscriber",
2313
+ params: {
2314
+ iccid: { type: "string", required: true },
2315
+ package_id: { type: "number", required: true },
2316
+ start_date: { type: "string(ISO8601)", required: false },
2317
+ end_date: { type: "string(ISO8601)", required: false }
2318
+ },
2319
+ annotations: "destructiveHint",
2320
+ verified_against_server: true,
2321
+ verified_against_live_docs: true
2322
+ },
2323
+ {
2324
+ name: "modify_subscriber_voip_plan",
2325
+ ocs_method: "modifySubscriberVoipPlan",
2326
+ category: "subscriber",
2327
+ scope: "write",
2328
+ status: "implemented",
2329
+ description: "Change the VoIP plan assigned to a subscriber",
2330
+ params: {
2331
+ iccid: { type: "string", required: true },
2332
+ voip_plan_id: { type: "number", required: true }
2333
+ },
2334
+ annotations: "destructiveHint",
2335
+ verified_against_server: true,
2336
+ verified_against_live_docs: true
2337
+ },
2338
+ {
2339
+ name: "push_steering_to_subscriber",
2340
+ ocs_method: "pushSteeringToSubs",
2341
+ category: "subscriber",
2342
+ scope: "write",
2343
+ status: "implemented",
2344
+ description: "Push the current steering list configuration down to the subscriber's SIM \u2014 required after modifying steering to take effect",
2345
+ params: {
2346
+ iccid: { type: "string", required: true }
2347
+ },
2348
+ annotations: "destructiveHint",
2349
+ verified_against_server: true,
2350
+ verified_against_live_docs: true
2351
+ },
2352
+ {
2353
+ name: "reset_subscriber_gz_counter",
2354
+ ocs_method: "resetSubsGzCounter",
2355
+ category: "subscriber",
2356
+ scope: "admin",
2357
+ status: "implemented",
2358
+ description: "Reset the Green Zone (Greenzone) volume counter for a subscriber \u2014 tracks bytes consumed on reseller whitelist after bundle depletion. Irreversible, use only for reprovisioning or billing disputes.",
2359
+ params: {
2360
+ iccid: { type: "string", required: true }
2361
+ },
2362
+ annotations: "destructiveHint",
2363
+ verified_against_server: true,
2364
+ verified_against_live_docs: true
2365
+ },
2366
+ {
2367
+ name: "resolve_cell_location",
2368
+ ocs_method: "getSubscriberLocationByCellId",
2369
+ category: "subscriber",
2370
+ scope: "read",
2371
+ status: "stubbed",
2372
+ audit_pr: "feat/ocs-feature-audit",
2373
+ audit_stub_id: "S-03",
2374
+ description: "Resolve a raw cell tower tuple (radioType + MCC + MNC + LAC + optional cellId) to lat/lon via Bridge4IP GeoSense. Does NOT require a subscriber identifier \u2014 caller supplies cell params directly. Lower-level primitive than get_subscriber_location_by_cell_id. Needed for Relay LU webhook consumer.",
2375
+ params: {
2376
+ radio_type: { type: "enum[2G,3G,4G,5G,NB-IoT]", required: true },
2377
+ mcc: { type: "integer", required: true },
2378
+ mnc: { type: "integer", required: true },
2379
+ lac: { type: "integer", required: true },
2380
+ cell_id: { type: "integer", required: false },
2381
+ signal_strength: { type: "integer", required: false }
2382
+ },
2383
+ response: {
2384
+ latitude: { type: "number" },
2385
+ longitude: { type: "number" },
2386
+ accuracy: { type: "integer", notes: "median error in meters at 50% confidence" }
2387
+ },
2388
+ annotations: "readOnlyHint",
2389
+ blocked_by: "confirm Relay LU payload shape with Bridge4IP NOC",
2390
+ verified_against_server: false,
2391
+ verified_against_live_docs: true
2392
+ },
2393
+ {
2394
+ name: "carrier_webhook_config",
2395
+ ocs_method: "getResellerInfo",
2396
+ category: "reseller",
2397
+ scope: "read",
2398
+ status: "stubbed",
2399
+ audit_pr: "feat/ocs-feature-audit",
2400
+ audit_stub_id: "S-04",
2401
+ description: "Read-only view of Bridge4IP webhook and relay flag state from getResellerInfo.trafficInfo. Surfaces relayLU, relayGy, relayCallSms, relayVoIP booleans + notification webhook types. Relay LU is the key flag for event-driven country-change detection (vs polling). Relay endpoint config is OCS portal UI-only.",
2402
+ params: {
2403
+ reseller_id: { type: "number", required: false }
2404
+ },
2405
+ response: {
2406
+ relay_lu: { type: "boolean", notes: "Update Location relay active \u2014 closest to country-change signal" },
2407
+ relay_gy: { type: "boolean", notes: "Mobile data usage relay active" },
2408
+ relay_voip: { type: "boolean", notes: "VoIP usage relay active" },
2409
+ relay_calls_sms: { type: "boolean", notes: "Calls + SMS relay active" },
2410
+ notification_webhooks: { type: "array", notes: "Active notification types: prepaid_usage, low_credit, esim_status, recurring_packages" }
2411
+ },
2412
+ annotations: "readOnlyHint",
2413
+ verified_against_server: false,
2414
+ verified_against_live_docs: true
2415
+ }
2416
+ ],
2417
+ v1_app_methods: [
2418
+ {
2419
+ name: "fleet_health_app",
2420
+ category: "apps",
2421
+ scope: "read",
2422
+ description: "MCP App: Fleet Health Dashboard \u2014 rendered chart UI wrapping the fleet_health composite. Read-only, no destructive ops.",
2423
+ min_tier: "free",
2424
+ destructive: false,
2425
+ ui_resource_uri: "ui://fleet-health-dashboard",
2426
+ verified_against_server: false,
2427
+ verified_against_live_docs: false
2428
+ },
2429
+ {
2430
+ name: "provision_esim_wizard",
2431
+ category: "apps",
2432
+ scope: "write",
2433
+ description: "MCP App: eSIM Provisioning Wizard \u2014 3-step wizard UI. Destructive on step 3 (confirm). Pro tier minimum.",
2434
+ min_tier: "pro",
2435
+ destructive: true,
2436
+ destructive_step: 3,
2437
+ ui_resource_uri: "ui://esim-provisioning-wizard",
2438
+ verified_against_server: false,
2439
+ verified_against_live_docs: false
2440
+ },
2441
+ {
2442
+ name: "balance_topup_form",
2443
+ category: "apps",
2444
+ scope: "admin",
2445
+ description: "MCP App: Balance Top-up Form \u2014 single-field destructive form with dry_run preview. Enterprise only, MFA-gated.",
2446
+ min_tier: "enterprise",
2447
+ destructive: true,
2448
+ mfa_gated: true,
2449
+ ui_resource_uri: "ui://balance-topup-form",
2450
+ verified_against_server: false,
2451
+ verified_against_live_docs: false
2452
+ }
2453
+ ]
2454
+ };
2455
+
1478
2456
  // ../../packages/ocs-spec/src/mcc-iso.ts
1479
2457
  var MCC_TO_ISO = {
1480
2458
  // Europe
@@ -1971,6 +2949,13 @@ function mccToIso(mcc) {
1971
2949
  return MCC_TO_ISO[n] ?? null;
1972
2950
  }
1973
2951
 
2952
+ // ../../packages/ocs-spec/src/index.ts
2953
+ var ocsSpec = ocs_methods_default;
2954
+ var ocsMethods = ocsSpec.v1_methods;
2955
+ var ocsIntelligenceMethods = ocsSpec.v1_intelligence_methods;
2956
+ var ocsBacklog = ocsSpec.v1_1_backlog;
2957
+ var ocsAppMethods = ocsSpec.v1_app_methods;
2958
+
1974
2959
  // src/intelligence.ts
1975
2960
  async function safeCall(env, token2, method, params = {}) {
1976
2961
  try {
@@ -3147,7 +4132,7 @@ function registerAllBacklogTools(server2, ctx) {
3147
4132
  resellerId = await getDefaultResellerId(ctx.env, token2);
3148
4133
  }
3149
4134
  const params = {};
3150
- if (resellerId !== void 0) params.resellerId = resellerId;
4135
+ if (resellerId !== void 0) params.id = resellerId;
3151
4136
  const raw = await client.call("getResellerInfo", params);
3152
4137
  const traffic = raw.trafficInfo ?? {};
3153
4138
  const notification = raw.notificationInfo ?? {};
@@ -8390,7 +9375,7 @@ var audit = (_row) => {
8390
9375
  var getUserToken = async (_sub) => token;
8391
9376
  var toolCtx = { env: stdioEnv, props, audit, getUserToken };
8392
9377
  var server = new McpServer(
8393
- { name: "carrier-mcp", version: "0.2.0" },
9378
+ { name: "carrier-mcp", version: "0.2.4" },
8394
9379
  {
8395
9380
  instructions: "Carrier MCP \u2014 single-user stdio mode. Full tool registry (mirrors the deployed Worker)."
8396
9381
  }