Story SDK MCP Server

Official
""" Contract addresses for Story Protocol on different networks. """ # Aeneid testnet contract addresses AENEID_CONTRACTS = { "AccessController": "0xcCF37d0a503Ee1D4C11208672e622ed3DFB2275a", "ArbitrationPolicyUMA": "0xfFD98c3877B8789124f02C7E8239A4b0Ef11E936", "CoreMetadataModule": "0x6E81a25C99C6e8430aeC7353325EB138aFE5DC16", "CoreMetadataViewModule": "0xB3F88038A983CeA5753E11D144228Ebb5eACdE20", "DisputeModule": "0x9b7A9c70AFF961C799110954fc06F3093aeb94C5", "EvenSplitGroupPool": "0xf96f2c30b41Cb6e0290de43C8528ae83d4f33F89", "GroupNFT": "0x4709798FeA84C84ae2475fF0c25344115eE1529f", "GroupingModule": "0x69D3a7aa9edb72Bc226E745A7cCdd50D947b69Ac", "IPAccountImplBeacon": "0x9825cc7A398D9C3dDD66232A8Ec76d5b05422581", "IPAccountImplBeaconProxy": "0x00b800138e4D82D1eea48b414d2a2A8Aee9A33b1", "IPAccountImplCode": "0x6ccAd5718a27fB6a09EAdb737D889A2007838b77", "IPAssetRegistry": "0x77319B4031e6eF1250907aa00018B8B1c67a244b", "IPGraphACL": "0x1640A22a8A086747cD377b73954545e2Dfcc9Cad", "IpRoyaltyVaultBeacon": "0x6928ba25Aa5c410dd855dFE7e95713d83e402AA6", "IpRoyaltyVaultImpl": "0x73e2D097F71e5103824abB6562362106A8955AEc", "LicenseRegistry": "0x529a750E02d8E2f15649c13D69a465286a780e24", "LicenseToken": "0xFe3838BFb30B34170F00030B52eA4893d8aAC6bC", "LicensingModule": "0x04fbd8a2e56dd85CFD5500A4A4DfA955B9f1dE6f", "ModuleRegistry": "0x022DBAAeA5D8fB31a0Ad793335e39Ced5D631fa5", "PILicenseTemplate": "0x2E896b0b2Fdb7457499B56AAaA4AE55BCB4Cd316", "ProtocolAccessManager": "0xFdece7b8a2f55ceC33b53fd28936B4B1e3153d53", "ProtocolPauseAdmin": "0xdd661f55128A80437A0c0BDA6E13F214A3B2EB24", "RoyaltyModule": "0xD2f60c40fEbccf6311f8B47c4f2Ec6b040400086", "RoyaltyPolicyLAP": "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E", "RoyaltyPolicyLRP": "0x9156e603C949481883B1d3355c6f1132D191fC41", "SPG_NFT": "0x76ba2c2428F756010683c4ece6f49296b4756C1A", # Official SPG NFT contract for Aeneid } # Mainnet contract addresses MAINNET_CONTRACTS = { "AccessController": "0xcCF37d0a503Ee1D4C11208672e622ed3DFB2275a", "ArbitrationPolicyUMA": "0xfFD98c3877B8789124f02C7E8239A4b0Ef11E936", "CoreMetadataModule": "0x6E81a25C99C6e8430aeC7353325EB138aFE5DC16", "CoreMetadataViewModule": "0xB3F88038A983CeA5753E11D144228Ebb5eACdE20", "DisputeModule": "0x9b7A9c70AFF961C799110954fc06F3093aeb94C5", "EvenSplitGroupPool": "0xf96f2c30b41Cb6e0290de43C8528ae83d4f33F89", "GroupNFT": "0x4709798FeA84C84ae2475fF0c25344115eE1529f", "GroupingModule": "0x69D3a7aa9edb72Bc226E745A7cCdd50D947b69Ac", "IPAccountImplBeacon": "0x9825cc7A398D9C3dDD66232A8Ec76d5b05422581", "IPAccountImplBeaconProxy": "0x00b800138e4D82D1eea48b414d2a2A8Aee9A33b1", "IPAccountImplCode": "0x7343646585443F1c3F64E4F08b708788527e1C77", "IPAssetRegistry": "0x77319B4031e6eF1250907aa00018B8B1c67a244b", "IPGraphACL": "0x1640A22a8A086747cD377b73954545e2Dfcc9Cad", "IpRoyaltyVaultBeacon": "0x6928ba25Aa5c410dd855dFE7e95713d83e402AA6", "IpRoyaltyVaultImpl": "0x63cC7611316880213f3A4Ba9bD72b0EaA2010298", "LicenseRegistry": "0x529a750E02d8E2f15649c13D69a465286a780e24", "LicenseToken": "0xFe3838BFb30B34170F00030B52eA4893d8aAC6bC", "LicensingModule": "0x04fbd8a2e56dd85CFD5500A4A4DfA955B9f1dE6f", "ModuleRegistry": "0x022DBAAeA5D8fB31a0Ad793335e39Ced5D631fa5", "PILicenseTemplate": "0x2E896b0b2Fdb7457499B56AAaA4AE55BCB4Cd316", "ProtocolAccessManager": "0xFdece7b8a2f55ceC33b53fd28936B4B1e3153d53", "ProtocolPauseAdmin": "0xdd661f55128A80437A0c0BDA6E13F214A3B2EB24", "RoyaltyModule": "0xD2f60c40fEbccf6311f8B47c4f2Ec6b040400086", "RoyaltyPolicyLAP": "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E", "RoyaltyPolicyLRP": "0x9156e603C949481883B1d3355c6f1132D191fC41", "SPG_NFT": "0x98971c660ac20880b60F86Cc3113eBd979eb3aAE", # Official SPG NFT contract for Mainnet } # Chain IDs for different networks CHAIN_IDS = { "aeneid": 1315, # Story Protocol Aeneid testnet "mainnet": 1514, # Story Protocol mainnet } def get_contracts_by_chain_id(chain_id): """ Get contract addresses based on chain ID. Args: chain_id (int): The chain ID of the network Returns: dict: Contract addresses for the specified network """ if chain_id == CHAIN_IDS["aeneid"]: return AENEID_CONTRACTS elif chain_id == CHAIN_IDS["mainnet"]: return MAINNET_CONTRACTS else: raise ValueError(f"Unsupported chain ID: {chain_id}") def get_contracts_by_network_name(network_name): """ Get contract addresses based on network name. Args: network_name (str): The name of the network ('aeneid' or 'mainnet') Returns: dict: Contract addresses for the specified network """ network_name = network_name.lower() if network_name == "aeneid": return AENEID_CONTRACTS elif network_name == "mainnet": return MAINNET_CONTRACTS else: raise ValueError(f"Unsupported network name: {network_name}")