This is page 1 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context. # Directory Structure ``` ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── llms-install.md ├── llms.txt ├── package.json ├── packages │ ├── client │ │ ├── .env.example │ │ ├── package.json │ │ ├── README.md │ │ ├── src │ │ │ ├── env.ts │ │ │ ├── index.ts │ │ │ └── LocalWallet.ts │ │ └── tsconfig.json │ └── server │ ├── .env.example │ ├── API specs │ │ ├── algod_api.json │ │ ├── indexer_api.json │ │ ├── mcp.json │ │ ├── nfd_api.json │ │ ├── ultrade_api.json │ │ ├── vestige_api.json │ │ └── vestige_free_api.json │ ├── Dockerfile │ ├── jest.config.js │ ├── package.json │ ├── README.md │ ├── smithery.yaml │ ├── src │ │ ├── algorand-client.ts │ │ ├── env.ts │ │ ├── index.ts │ │ ├── resources │ │ │ ├── index.ts │ │ │ ├── knowledge │ │ │ │ ├── ARCs.txt │ │ │ │ ├── developers-algokit-architecture-decisions.txt │ │ │ │ ├── developers-algokit-cli.txt │ │ │ │ ├── developers-algokit-utils-python.txt │ │ │ │ ├── developers-algokit-utils-typescript.txt │ │ │ │ ├── developers-clis.txt │ │ │ │ ├── developers-details.txt │ │ │ │ ├── developers-liquid-auth.txt │ │ │ │ ├── developers-nodes.txt │ │ │ │ ├── developers-puya.txt │ │ │ │ ├── developers-python.txt │ │ │ │ ├── developers-sdks-js.txt │ │ │ │ ├── developers-sdks-python.txt │ │ │ │ ├── developers-tealscript.txt │ │ │ │ ├── developers.txt │ │ │ │ ├── index.ts │ │ │ │ ├── taxonomy │ │ │ │ │ ├── algokit-cli:README.md │ │ │ │ │ ├── algokit:cli:algokit.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md │ │ │ │ │ ├── algokit:cli:articles:output_stability.md │ │ │ │ │ ├── algokit:cli:cli:index.md │ │ │ │ │ ├── algokit:cli:features:compile.md │ │ │ │ │ ├── algokit:cli:features:completions.md │ │ │ │ │ ├── algokit:cli:features:config.md │ │ │ │ │ ├── algokit:cli:features:dispenser.md │ │ │ │ │ ├── algokit:cli:features:doctor.md │ │ │ │ │ ├── algokit:cli:features:explore.md │ │ │ │ │ ├── algokit:cli:features:generate.md │ │ │ │ │ ├── algokit:cli:features:goal.md │ │ │ │ │ ├── algokit:cli:features:init.md │ │ │ │ │ ├── algokit:cli:features:localnet.md │ │ │ │ │ ├── algokit:cli:features:project:bootstrap.md │ │ │ │ │ ├── algokit:cli:features:project:deploy.md │ │ │ │ │ ├── algokit:cli:features:project:link.md │ │ │ │ │ ├── algokit:cli:features:project:list.md │ │ │ │ │ ├── algokit:cli:features:project:run.md │ │ │ │ │ ├── algokit:cli:features:project.md │ │ │ │ │ ├── algokit:cli:features:tasks:analyze.md │ │ │ │ │ ├── algokit:cli:features:tasks:ipfs.md │ │ │ │ │ ├── algokit:cli:features:tasks:mint.md │ │ │ │ │ ├── algokit:cli:features:tasks:nfd.md │ │ │ │ │ ├── algokit:cli:features:tasks:opt.md │ │ │ │ │ ├── algokit:cli:features:tasks:send.md │ │ │ │ │ ├── algokit:cli:features:tasks:sign.md │ │ │ │ │ ├── algokit:cli:features:tasks:transfer.md │ │ │ │ │ ├── algokit:cli:features:tasks:vanity_address.md │ │ │ │ │ ├── algokit:cli:features:tasks:wallet.md │ │ │ │ │ ├── algokit:cli:features:tasks.md │ │ │ │ │ ├── algokit:cli:tutorials:algokit-template.md │ │ │ │ │ ├── algokit:cli:tutorials:intro.md │ │ │ │ │ ├── algokit:cli:tutorials:smart-contracts.md │ │ │ │ │ ├── algokit:docs:testnet_api.md │ │ │ │ │ ├── algokit:lora:README.md │ │ │ │ │ ├── algokit:README.md │ │ │ │ │ ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:account.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-client.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-deploy.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:client.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:debugger.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:dispenser-client.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:transfer.md │ │ │ │ │ ├── algokit:utils:python:markdown:index.md │ │ │ │ │ ├── algokit:utils:python:README.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:account.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-client.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-deploy.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:client.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:debugger.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:dispenser-client.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:transfer.md │ │ │ │ │ ├── algokit:utils:python:source:index.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:account.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:algorand-client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:amount.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-deploy.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:app.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:asset.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:debugging.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:dispenser-client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:event-emitter.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:indexer.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:testing.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction-composer.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:transfer.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:typed-app-clients.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TestLogger.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_config.Config.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.indexer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:testing.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_arc56.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_deployer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_composer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_config.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_debugging.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_expand.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_indexer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logging.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logic_error.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_network_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_testing.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transaction.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transfer.md │ │ │ │ │ ├── algokit:utils:typescript:code:README.md │ │ │ │ │ ├── algokit:utils:typescript:README.md │ │ │ │ │ ├── algokit:utils:typescript:v7-migration.md │ │ │ │ │ ├── algokit:utils:typescript:v8-migration.md │ │ │ │ │ ├── ARCs:ARC-template.md │ │ │ │ │ ├── ARCs:assets:arc-0012:README.md │ │ │ │ │ ├── ARCs:assets:arc-0034:TemplateForm.md │ │ │ │ │ ├── ARCs:assets:arc-0062:README.md │ │ │ │ │ ├── ARCs:pages:nfts.md │ │ │ │ │ ├── ARCs:pages:wallets.md │ │ │ │ │ ├── ARCs:README.md │ │ │ │ │ ├── ARCs:specs:arc-0000.md │ │ │ │ │ ├── ARCs:specs:arc-0001.md │ │ │ │ │ ├── ARCs:specs:arc-0002.md │ │ │ │ │ ├── ARCs:specs:arc-0003.md │ │ │ │ │ ├── ARCs:specs:arc-0004.md │ │ │ │ │ ├── ARCs:specs:arc-0005.md │ │ │ │ │ ├── ARCs:specs:arc-0006.md │ │ │ │ │ ├── ARCs:specs:arc-0007.md │ │ │ │ │ ├── ARCs:specs:arc-0008.md │ │ │ │ │ ├── ARCs:specs:arc-0009.md │ │ │ │ │ ├── ARCs:specs:arc-0010.md │ │ │ │ │ ├── ARCs:specs:arc-0011.md │ │ │ │ │ ├── ARCs:specs:arc-0012.md │ │ │ │ │ ├── ARCs:specs:arc-0015.md │ │ │ │ │ ├── ARCs:specs:arc-0016.md │ │ │ │ │ ├── ARCs:specs:arc-0018.md │ │ │ │ │ ├── ARCs:specs:arc-0019.md │ │ │ │ │ ├── ARCs:specs:arc-0020.md │ │ │ │ │ ├── ARCs:specs:arc-0021.md │ │ │ │ │ ├── ARCs:specs:arc-0022.md │ │ │ │ │ ├── ARCs:specs:arc-0023.md │ │ │ │ │ ├── ARCs:specs:arc-0025.md │ │ │ │ │ ├── ARCs:specs:arc-0026.md │ │ │ │ │ ├── ARCs:specs:arc-0028.md │ │ │ │ │ ├── ARCs:specs:arc-0032.md │ │ │ │ │ ├── ARCs:specs:arc-0033.md │ │ │ │ │ ├── ARCs:specs:arc-0034.md │ │ │ │ │ ├── ARCs:specs:arc-0035.md │ │ │ │ │ ├── ARCs:specs:arc-0036.md │ │ │ │ │ ├── ARCs:specs:arc-0042.md │ │ │ │ │ ├── ARCs:specs:arc-0047.md │ │ │ │ │ ├── ARCs:specs:arc-0048.md │ │ │ │ │ ├── ARCs:specs:arc-0049.md │ │ │ │ │ ├── ARCs:specs:arc-0054.md │ │ │ │ │ ├── ARCs:specs:arc-0055.md │ │ │ │ │ ├── ARCs:specs:arc-0056.md │ │ │ │ │ ├── ARCs:specs:arc-0059.md │ │ │ │ │ ├── ARCs:specs:arc-0062.md │ │ │ │ │ ├── ARCs:specs:arc-0065.md │ │ │ │ │ ├── ARCs:specs:arc-0069.md │ │ │ │ │ ├── ARCs:specs:arc-0072.md │ │ │ │ │ ├── ARCs:specs:arc-0073.md │ │ │ │ │ ├── ARCs:specs:arc-0074.md │ │ │ │ │ ├── ARCs:specs:arc-0076.md │ │ │ │ │ ├── ARCs:specs:arc-0078.md │ │ │ │ │ ├── ARCs:specs:arc-0079.md │ │ │ │ │ ├── ARCs:specs:arc-0200.md │ │ │ │ │ ├── clis_index.md │ │ │ │ │ ├── developer:docs:about.md │ │ │ │ │ ├── developer:docs:clis:algokey:algokey.md │ │ │ │ │ ├── developer:docs:clis:algokey:generate.md │ │ │ │ │ ├── developer:docs:clis:algokey:import.md │ │ │ │ │ ├── developer:docs:clis:algokey:multisig:append-auth-addr.md │ │ │ │ │ ├── developer:docs:clis:algokey:multisig:multisig.md │ │ │ │ │ ├── developer:docs:clis:algokey:part:info.md │ │ │ │ │ ├── developer:docs:clis:algokey:part:part.md │ │ │ │ │ ├── developer:docs:clis:algokey:part:reparent.md │ │ │ │ │ ├── developer:docs:clis:algokey:sign.md │ │ │ │ │ ├── developer:docs:clis:conduit:conduit.md │ │ │ │ │ ├── developer:docs:clis:conduit:init.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:exporters.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:importers.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:list.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:processors.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:diagcfg.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:disable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:enable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:metric.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:status.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:disable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:enable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:endpoint.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:name.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:status.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:telemetry.md │ │ │ │ │ ├── developer:docs:clis:goal:node:restart.md │ │ │ │ │ ├── developer:docs:clis:goal:node:start.md │ │ │ │ │ ├── developer:docs:clis:goal:node:status.md │ │ │ │ │ ├── developer:docs:clis:goal:node:stop.md │ │ │ │ │ ├── developer:docs:clis:goal:node:wait.md │ │ │ │ │ ├── developer:docs:clis:goal:protocols.md │ │ │ │ │ ├── developer:docs:clis:goal:report.md │ │ │ │ │ ├── developer:docs:clis:goal:version.md │ │ │ │ │ ├── developer:docs:clis:goal:wallet:list.md │ │ │ │ │ ├── developer:docs:clis:goal:wallet:new.md │ │ │ │ │ ├── developer:docs:clis:goal:wallet:wallet.md │ │ │ │ │ ├── developer:docs:clis:indexer:api-config.md │ │ │ │ │ ├── developer:docs:clis:indexer:daemon.md │ │ │ │ │ ├── developer:docs:clis:indexer:indexer.md │ │ │ │ │ ├── developer:docs:clis:indexer:util:util.md │ │ │ │ │ ├── developer:docs:clis:indexer:util:validator.md │ │ │ │ │ ├── developer:docs:clis:kmd.md │ │ │ │ │ ├── developer:docs:clis:tealdbg:debug.md │ │ │ │ │ ├── developer:docs:clis:tealdbg:remote.md │ │ │ │ │ ├── developer:docs:clis:tealdbg:tealdbg.md │ │ │ │ │ ├── developer:docs:details:accounts:create.md │ │ │ │ │ ├── developer:docs:details:accounts:index.md │ │ │ │ │ ├── developer:docs:details:accounts:rekey.md │ │ │ │ │ ├── developer:docs:details:algorand_consensus.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:betanet.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:index.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:mainnet.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:testnet.md │ │ │ │ │ ├── developer:docs:details:asa.md │ │ │ │ │ ├── developer:docs:details:atc.md │ │ │ │ │ ├── developer:docs:details:atomic_transfers.md │ │ │ │ │ ├── developer:docs:details:conduit.md │ │ │ │ │ ├── developer:docs:details:crust.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:index.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:guidelines.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:index.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:jsonspec.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:index.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:specification.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:ABI:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:create.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:state.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:txs.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:debugging.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:guidelines.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md │ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:beaker.md │ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:pyteal.md │ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:python.md │ │ │ │ │ ├── developer:docs:details:encoding.md │ │ │ │ │ ├── developer:docs:details:ethereum_to_algorand.md │ │ │ │ │ ├── developer:docs:details:index.md │ │ │ │ │ ├── developer:docs:details:indexer.md │ │ │ │ │ ├── developer:docs:details:parameter_tables.md │ │ │ │ │ ├── developer:docs:details:stateproofs:index.md │ │ │ │ │ ├── developer:docs:details:stateproofs:light_client.md │ │ │ │ │ ├── developer:docs:details:technical_faq.md │ │ │ │ │ ├── developer:docs:details:transactions:index.md │ │ │ │ │ ├── developer:docs:details:transactions:offline_transactions.md │ │ │ │ │ ├── developer:docs:details:transactions:payment_prompts.md │ │ │ │ │ ├── developer:docs:details:transactions:signatures.md │ │ │ │ │ ├── developer:docs:details:transactions:transactions.md │ │ │ │ │ ├── developer:docs:details:useful_resources.md │ │ │ │ │ ├── developer:docs:get-started:algokit.md │ │ │ │ │ ├── developer:docs:get-started:basics:what_is_blockchain.md │ │ │ │ │ ├── developer:docs:get-started:basics:whats_a_dapp.md │ │ │ │ │ ├── developer:docs:get-started:basics:where_to_start.md │ │ │ │ │ ├── developer:docs:get-started:basics:why_algorand.md │ │ │ │ │ ├── developer:docs:get-started:tokenization:ft.md │ │ │ │ │ ├── developer:docs:get-started:tokenization:nft.md │ │ │ │ │ ├── developer:docs:index.md │ │ │ │ │ ├── developer:docs:rest-apis:algod.md │ │ │ │ │ ├── developer:docs:rest-apis:indexer.md │ │ │ │ │ ├── developer:docs:rest-apis:kmd.md │ │ │ │ │ ├── developer:docs:rest-apis:restendpoints.md │ │ │ │ │ ├── developer:docs:run-a-node:operations:catchup.md │ │ │ │ │ ├── developer:docs:run-a-node:operations:switch_networks.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:generate_keys.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:index.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:offline.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:online.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:renew.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:artifacts.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:config.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:relay.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:telemetry-config.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:indexer.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:install.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:node-troubleshooting.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:types.md │ │ │ │ │ ├── developer:docs:sdks:go:index.md │ │ │ │ │ ├── developer:docs:sdks:index.md │ │ │ │ │ ├── developer:docs:sdks:java:index.md │ │ │ │ │ ├── developer:docs:sdks:javascript:index.md │ │ │ │ │ ├── developer:docs:sdks:python:index.md │ │ │ │ │ ├── developer:python:code:example:accounts.md │ │ │ │ │ ├── developer:python:code:example:arc4_types.md │ │ │ │ │ ├── developer:python:code:example:assets.md │ │ │ │ │ ├── developer:python:code:example:box_storage.md │ │ │ │ │ ├── developer:python:code:example:control_flow.md │ │ │ │ │ ├── developer:python:code:example:crypto:merkle_tree.md │ │ │ │ │ ├── developer:python:code:example:defi:amm.md │ │ │ │ │ ├── developer:python:code:example:defi:auction.md │ │ │ │ │ ├── developer:python:code:example:defi:htlc_logicsig.md │ │ │ │ │ ├── developer:python:code:example:defi:marketplace.md │ │ │ │ │ ├── developer:python:code:example:events:arc28_events.md │ │ │ │ │ ├── developer:python:code:example:global_storage.md │ │ │ │ │ ├── developer:python:code:example:governance:simple_voting.md │ │ │ │ │ ├── developer:python:code:example:hello_world.md │ │ │ │ │ ├── developer:python:code:example:inner_transactions.md │ │ │ │ │ ├── developer:python:code:example:local_storage.md │ │ │ │ │ ├── developer:python:code:example:nft:proof_of_attendance.md │ │ │ │ │ ├── developer:python:code:example:privacy:zk_whitelist.md │ │ │ │ │ ├── developer:python:code:example:scratch_storage.md │ │ │ │ │ ├── developer:python:code:example:self_payment.md │ │ │ │ │ ├── developer:python:code:example:struct_in_box.md │ │ │ │ │ ├── developer:python:code:example:subsidize_app_call.md │ │ │ │ │ ├── developer:python:code:example:transactions.md │ │ │ │ │ ├── developer:python:code:example:utility:calculator.md │ │ │ │ │ ├── devportal-code-examples:projects:python-contract-examples:README.md │ │ │ │ │ ├── devportal-code-examples:README.md │ │ │ │ │ ├── docs:.walletconnect:index.md │ │ │ │ │ ├── docs:.walletconnect:walletconnect-schema.md │ │ │ │ │ ├── docs:README.md │ │ │ │ │ ├── docs:scripts:example_tracker:example_list.md │ │ │ │ │ ├── docs:scripts:README.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── liquid_auth_index.md │ │ │ │ │ ├── liquid-auth:ARCHITECTURE.md │ │ │ │ │ ├── liquid-auth:decisions:1-Service-Authentication.md │ │ │ │ │ ├── liquid-auth:decisions:2-Bidirectional-Communication.md │ │ │ │ │ ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md │ │ │ │ │ ├── liquid-auth:decisions:4-Fido-Extension.md │ │ │ │ │ ├── liquid-auth:decisions:README.md │ │ │ │ │ ├── liquid-auth:docs:architecture.md │ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:authenticate.md │ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:register.md │ │ │ │ │ ├── liquid-auth:docs:clients:browser:authentication.md │ │ │ │ │ ├── liquid-auth:docs:clients:browser:example.md │ │ │ │ │ ├── liquid-auth:docs:introduction.md │ │ │ │ │ ├── liquid-auth:docs:README.md │ │ │ │ │ ├── liquid-auth:docs:server:environment-variables.md │ │ │ │ │ ├── liquid-auth:docs:server:integrations.md │ │ │ │ │ ├── liquid-auth:docs:server:introduction.md │ │ │ │ │ ├── liquid-auth:docs:server:running-locally.md │ │ │ │ │ ├── liquid-auth:README.md │ │ │ │ │ ├── liquid-auth:SEQUENCE.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md │ │ │ │ │ ├── liquid-auth:sites:express-dapp:README.md │ │ │ │ │ ├── liquid-auth:VISION.md │ │ │ │ │ ├── puya_index.md │ │ │ │ │ ├── puya:docs:algopy_testing:index.md │ │ │ │ │ ├── puya:docs:api-algopy.arc4.md │ │ │ │ │ ├── puya:docs:api-algopy.gtxn.md │ │ │ │ │ ├── puya:docs:api-algopy.itxn.md │ │ │ │ │ ├── puya:docs:api-algopy.md │ │ │ │ │ ├── puya:docs:api-algopy.op.md │ │ │ │ │ ├── puya:docs:api.md │ │ │ │ │ ├── puya:docs:compiler.md │ │ │ │ │ ├── puya:docs:index.md │ │ │ │ │ ├── puya:docs:language-guide.md │ │ │ │ │ ├── puya:docs:lg-arc28.md │ │ │ │ │ ├── puya:docs:lg-arc4.md │ │ │ │ │ ├── puya:docs:lg-builtins.md │ │ │ │ │ ├── puya:docs:lg-calling-apps.md │ │ │ │ │ ├── puya:docs:lg-compile.md │ │ │ │ │ ├── puya:docs:lg-control.md │ │ │ │ │ ├── puya:docs:lg-errors.md │ │ │ │ │ ├── puya:docs:lg-logs.md │ │ │ │ │ ├── puya:docs:lg-modules.md │ │ │ │ │ ├── puya:docs:lg-opcode-budget.md │ │ │ │ │ ├── puya:docs:lg-ops.md │ │ │ │ │ ├── puya:docs:lg-storage.md │ │ │ │ │ ├── puya:docs:lg-structure.md │ │ │ │ │ ├── puya:docs:lg-transactions.md │ │ │ │ │ ├── puya:docs:lg-types.md │ │ │ │ │ ├── puya:docs:lg-unsupported-python-features.md │ │ │ │ │ ├── puya:docs:principles.md │ │ │ │ │ ├── puya:examples:auction:README.md │ │ │ │ │ ├── puya:python:testing:docs:algopy.md │ │ │ │ │ ├── puya:python:testing:docs:api.md │ │ │ │ │ ├── puya:python:testing:docs:coverage.md │ │ │ │ │ ├── puya:python:testing:docs:examples.md │ │ │ │ │ ├── puya:python:testing:docs:faq.md │ │ │ │ │ ├── puya:python:testing:docs:index.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:arc4-types.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:avm-types.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:concepts.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:contract-testing.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:index.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:opcodes.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:signature-testing.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:state-management.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:subroutines.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:transactions.md │ │ │ │ │ ├── puya:python:testing:examples:README.md │ │ │ │ │ ├── puya:python:testing:README.md │ │ │ │ │ ├── puya:README.md │ │ │ │ │ ├── puya:src:puya:ARCHITECTURE.md │ │ │ │ │ ├── puya:src:puyapy:_typeshed:README.md │ │ │ │ │ ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md │ │ │ │ │ ├── puya:src:puyapy:awst_build:README.md │ │ │ │ │ ├── puya:stubs:README.md │ │ │ │ │ ├── puya:tests:test_expected_output:README.md │ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md │ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md │ │ │ │ │ ├── puya:typescript:docs:README.md │ │ │ │ │ ├── puya:typescript:packages:algo-ts:readme.md │ │ │ │ │ ├── puya:typescript:README.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIAddressType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayDynamicType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayStaticType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIBoolType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIByteType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIContract.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIInterface.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIMethod.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIStringType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABITupleType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIUfixedType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIUintType.md │ │ │ │ │ ├── SDKs:javascript:classes:Algodv2.md │ │ │ │ │ ├── SDKs:javascript:classes:AtomicTransactionComposer.md │ │ │ │ │ ├── SDKs:javascript:classes:DryrunResult.md │ │ │ │ │ ├── SDKs:javascript:classes:Indexer.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Account.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Application.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Asset.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetParams.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Block.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockRewards.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Box.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HashFactory.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HealthCheck.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofFields.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateSchema.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealValue.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Transaction.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md │ │ │ │ │ ├── SDKs:javascript:classes:Kmd.md │ │ │ │ │ ├── SDKs:javascript:classes:LogicSig.md │ │ │ │ │ ├── SDKs:javascript:classes:LogicSigAccount.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Account.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Application.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Asset.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetParams.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Box.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxReference.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BuildVersion.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.CompileResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunSource.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunState.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.KvDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ScratchChange.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProof.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Version.md │ │ │ │ │ ├── SDKs:javascript:classes:SourceMap.md │ │ │ │ │ ├── SDKs:javascript:classes:Transaction.md │ │ │ │ │ ├── SDKs:javascript:enums:ABIReferenceType.md │ │ │ │ │ ├── SDKs:javascript:enums:ABITransactionType.md │ │ │ │ │ ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md │ │ │ │ │ ├── SDKs:javascript:enums:IntDecoding.md │ │ │ │ │ ├── SDKs:javascript:enums:OnApplicationComplete.md │ │ │ │ │ ├── SDKs:javascript:enums:TransactionType.md │ │ │ │ │ ├── SDKs:javascript:examples:README.md │ │ │ │ │ ├── SDKs:javascript:FAQ.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworks.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIInterfaceParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodArgParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIResult.md │ │ │ │ │ ├── SDKs:javascript:interfaces:Account.md │ │ │ │ │ ├── SDKs:javascript:interfaces:Address.md │ │ │ │ │ ├── SDKs:javascript:interfaces:AlgodTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClient.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientError.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BoxReference.md │ │ │ │ │ ├── SDKs:javascript:interfaces:CustomTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedAssetParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedBoxReference.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSig.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedMultisig.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSubsig.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedTransaction.md │ │ │ │ │ ├── SDKs:javascript:interfaces:IndexerTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:KMDTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:MultisigMetadata.md │ │ │ │ │ ├── SDKs:javascript:interfaces:SignedTransaction.md │ │ │ │ │ ├── SDKs:javascript:interfaces:SuggestedParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionWithSigner.md │ │ │ │ │ ├── SDKs:javascript:modules:indexerModels.md │ │ │ │ │ ├── SDKs:javascript:modules:modelsv2.md │ │ │ │ │ ├── SDKs:javascript:modules.md │ │ │ │ │ ├── SDKs:javascript:README.md │ │ │ │ │ ├── SDKs:python:algosdk:v2client:harness:README.md │ │ │ │ │ ├── SDKs:python:examples:README.md │ │ │ │ │ ├── SDKs:python:README.md │ │ │ │ │ ├── tealscript:examples_amm_README.md │ │ │ │ │ ├── tealscript:examples_auction_README.md │ │ │ │ │ ├── tealscript:examples_big_box_README.md │ │ │ │ │ ├── tealscript:examples_itxns_README.md │ │ │ │ │ ├── tealscript:examples_lsig_with_app_README.md │ │ │ │ │ ├── tealscript:examples_reti_README.md │ │ │ │ │ ├── tealscript:FEATURES.md │ │ │ │ │ ├── tealscript:guides_atomic_txn.md │ │ │ │ │ ├── tealscript:guides_features.md │ │ │ │ │ ├── tealscript:guides_getting_started.md │ │ │ │ │ ├── tealscript:guides_inner_transactions.md │ │ │ │ │ ├── tealscript:guides_lifecycle.md │ │ │ │ │ ├── tealscript:guides_math.md │ │ │ │ │ ├── tealscript:guides_methods.md │ │ │ │ │ ├── tealscript:guides_multiple_contracts.md │ │ │ │ │ ├── tealscript:guides_pyteal.md │ │ │ │ │ ├── tealscript:guides_storage.md │ │ │ │ │ ├── tealscript:guides_Supported Types_arrays.md │ │ │ │ │ ├── tealscript:guides_Supported Types_numbers.md │ │ │ │ │ ├── TEALScript:README.md │ │ │ │ │ ├── tealscript:tests_test_package_README.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0001-intro.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0002-init.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0003-contract.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0004-artifacts.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0005-hello.md │ │ │ │ │ └── tealscript:tutorials_Hello World_0006-test.md │ │ │ │ └── taxonomy-categories │ │ │ │ ├── algokit-utils.json │ │ │ │ ├── algokit.json │ │ │ │ ├── arcs.json │ │ │ │ ├── clis.json │ │ │ │ ├── details.json │ │ │ │ ├── developers.json │ │ │ │ ├── liquid-auth.json │ │ │ │ ├── nodes.json │ │ │ │ ├── puya.json │ │ │ │ ├── python.json │ │ │ │ ├── sdks.json │ │ │ │ └── tealscript.json │ │ │ └── wallet │ │ │ └── index.ts │ │ ├── tools │ │ │ ├── accountManager.ts │ │ │ ├── algodManager.ts │ │ │ ├── apiManager │ │ │ │ ├── algod │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── application.ts │ │ │ │ │ ├── asset.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── transaction.ts │ │ │ │ ├── example │ │ │ │ │ ├── get-balance.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indexer │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── application.ts │ │ │ │ │ ├── asset.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── transaction.ts │ │ │ │ ├── nfd │ │ │ │ │ └── index.ts │ │ │ │ ├── tinyman │ │ │ │ │ ├── analytics.ts │ │ │ │ │ ├── bootstrap.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── liquidity.ts │ │ │ │ │ ├── opt_in.ts │ │ │ │ │ ├── pool.ts │ │ │ │ │ ├── remove_liquidity.ts │ │ │ │ │ └── swap.ts │ │ │ │ ├── ultrade │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── market.ts │ │ │ │ │ ├── system.ts │ │ │ │ │ └── wallet.ts │ │ │ │ └── vestige │ │ │ │ ├── assets.ts │ │ │ │ ├── balances.ts │ │ │ │ ├── index.ts │ │ │ │ ├── networks.ts │ │ │ │ ├── notes.ts │ │ │ │ ├── pools.ts │ │ │ │ ├── protocols.ts │ │ │ │ ├── swaps.ts │ │ │ │ └── vaults.ts │ │ │ ├── arc26Manager.ts │ │ │ ├── index.ts │ │ │ ├── knowledgeManager.ts │ │ │ ├── transactionManager │ │ │ │ ├── accountTransactions.ts │ │ │ │ ├── appTransactions │ │ │ │ │ ├── callTxn.ts │ │ │ │ │ ├── clearTxn.ts │ │ │ │ │ ├── closeOutTxn.ts │ │ │ │ │ ├── createTxn.ts │ │ │ │ │ ├── deleteTxn.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── optInTxn.ts │ │ │ │ │ ├── test │ │ │ │ │ │ ├── counter_approval.teal │ │ │ │ │ │ ├── counter_clear.teal │ │ │ │ │ │ ├── storage_test_approval_v2.teal │ │ │ │ │ │ ├── storage_test_approval.teal │ │ │ │ │ │ └── storage_test_clear.teal │ │ │ │ │ ├── types.ts │ │ │ │ │ └── updateTxn.ts │ │ │ │ ├── assetTransactions.ts │ │ │ │ ├── generalTransaction.ts │ │ │ │ └── index.ts │ │ │ └── utilityManager.ts │ │ ├── types.ts │ │ └── utils │ │ └── responseProcessor.ts │ ├── tests │ │ ├── resources │ │ │ ├── algod │ │ │ │ ├── account.test.ts │ │ │ │ ├── application.test.ts │ │ │ │ ├── asset.test.ts │ │ │ │ └── transaction.test.ts │ │ │ └── indexer │ │ │ ├── account.test.ts │ │ │ ├── application.test.ts │ │ │ ├── asset.test.ts │ │ │ └── transaction.test.ts │ │ └── tools │ │ ├── accountManager.test.ts │ │ ├── algodManager.test.ts │ │ ├── apiManager │ │ │ └── example │ │ │ └── get-balance.test.ts │ │ ├── transactionManager │ │ │ ├── accountTransactionManager.test.ts │ │ │ ├── appTransactionManager.test.ts │ │ │ ├── assetTransactionManager.test.ts │ │ │ ├── generalTransactionManager.test.ts │ │ │ └── transactionManager.test.ts │ │ └── utilityManager.test.ts │ └── tsconfig.json ├── README.md ├── rename_files.sh └── tsconfig.json ``` # Files -------------------------------------------------------------------------------- /packages/client/.env.example: -------------------------------------------------------------------------------- ``` 1 | ALGORAND_NETWORK=testnet 2 | ALGORAND_ALGOD_API=https://testnet-api.algonode.cloud/v2 3 | ALGORAND_ALGOD=https://testnet-api.algonode.cloud 4 | ALGORAND_INDEXER_API=https://testnet-idx.algonode.cloud/v2 5 | ALGORAND_INDEXER=https://testnet-idx.algonode.cloud 6 | ALGORAND_ALGOD_PORT= 7 | ALGORAND_INDEXER_PORT= 8 | ALGORAND_TOKEN= 9 | GOPLAUSIBLE_ACCOUNT= 10 | ALGORAND_AGENT_WALLET= ``` -------------------------------------------------------------------------------- /packages/server/.env.example: -------------------------------------------------------------------------------- ``` 1 | # Algorand Network Configuration 2 | ALGORAND_NETWORK=testnet 3 | ALGORAND_ALGOD_API=https://testnet-api.algonode.cloud/v2 4 | ALGORAND_ALGOD=https://testnet-api.algonode.cloud 5 | ALGORAND_INDEXER_API=https://testnet-idx.algonode.cloud/v2 6 | ALGORAND_INDEXER=https://testnet-idx.algonode.cloud 7 | ALGORAND_ALGOD_PORT= 8 | ALGORAND_INDEXER_PORT= 9 | ALGORAND_TOKEN= 10 | ALGORAND_AGENT_WALLET=problem aim online jaguar upper oil flight stumble mystery aerobic toy avoid file tomato moment exclude witness guard lab opera crunch noodle dune abandon broccoli 11 | # NFDomains API Configuration 12 | NFD_API_URL=https://api.nf.domains 13 | NFD_API_KEY= 14 | 15 | # Tinyman API Configuration 16 | TINYMAN_ACTIVE=false 17 | 18 | # Ultrade API Configuration 19 | ULTRADE_ACTIVE=true 20 | # Vestige API Configuration 21 | VESTIGE_ACTIVE=false 22 | VESTIGE_API_URL=https://api.vestigelabs.org 23 | VESTIGE_API_KEY= 24 | 25 | # Number of items per page for paginated responses (default: 5) 26 | ITEMS_PER_PAGE=10 27 | ``` -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- ``` 1 | .env 2 | # Logs 3 | logs 4 | *.log 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | lerna-debug.log* 9 | .pnpm-debug.log* 10 | test-mcp-server 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 13 | packages/client-sse/* 14 | # Runtime data 15 | pids 16 | *.pid 17 | *.seed 18 | *.pid.lock 19 | server-sse-agent 20 | server-sse-agent/* 21 | server-sse 22 | server-sse/* 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # nyc test coverage 31 | .nyc_output 32 | 33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 34 | .grunt 35 | 36 | # Bower dependency directory (https://bower.io/) 37 | bower_components 38 | 39 | # node-waf configuration 40 | .lock-wscript 41 | 42 | # Compiled binary addons (https://nodejs.org/api/addons.html) 43 | build/Release 44 | 45 | # Dependency directories 46 | node_modules/ 47 | jspm_packages/ 48 | 49 | # Snowpack dependency directory (https://snowpack.dev/) 50 | web_modules/ 51 | 52 | # TypeScript cache 53 | *.tsbuildinfo 54 | 55 | # Optional npm cache directory 56 | .npm 57 | 58 | # Optional eslint cache 59 | .eslintcache 60 | 61 | # Optional stylelint cache 62 | .stylelintcache 63 | 64 | # Microbundle cache 65 | .rpt2_cache/ 66 | .rts2_cache_cjs/ 67 | .rts2_cache_es/ 68 | .rts2_cache_umd/ 69 | 70 | # Optional REPL history 71 | .node_repl_history 72 | 73 | # Output of 'npm pack' 74 | *.tgz 75 | 76 | # Yarn Integrity file 77 | .yarn-integrity 78 | 79 | # dotenv environment variable files 80 | .env 81 | .env.development.local 82 | .env.test.local 83 | .env.production.local 84 | .env.local 85 | 86 | # parcel-bundler cache (https://parceljs.org/) 87 | .cache 88 | .parcel-cache 89 | 90 | # Next.js build output 91 | .next 92 | out 93 | 94 | # Nuxt.js build / generate output 95 | .nuxt 96 | dist 97 | 98 | # Gatsby files 99 | .cache/ 100 | # Comment in the public line in if your project uses Gatsby and not Next.js 101 | # https://nextjs.org/blog/next-9-1#public-directory-support 102 | # public 103 | 104 | # vuepress build output 105 | .vuepress/dist 106 | 107 | # vuepress v2.x temp and cache directory 108 | .temp 109 | .cache 110 | 111 | # Docusaurus cache and generated files 112 | .docusaurus 113 | 114 | # Serverless directories 115 | .serverless/ 116 | 117 | # FuseBox cache 118 | .fusebox/ 119 | 120 | # DynamoDB Local files 121 | .dynamodb/ 122 | 123 | # TernJS port file 124 | .tern-port 125 | 126 | # Stores VSCode versions used for testing VSCode extensions 127 | .vscode-test 128 | 129 | # yarn v2 130 | .yarn/cache 131 | .yarn/unplugged 132 | .yarn/build-state.yml 133 | .yarn/install-state.gz 134 | .pnp.* 135 | package-lock.json 136 | sse-server 137 | memory* 138 | *rules 139 | a2* 140 | packages/server/src/resources/.DS_Store 141 | packages/server/src/resources/.DS_Store 142 | packages/server/src/resources/knowledge/.DS_Store 143 | packages/server/src/resources/.DS_Store 144 | packages/server/src/resources/.DS_Store 145 | packages/.DS_Store 146 | .DS_Store 147 | .vscode/settings.json 148 | ``` -------------------------------------------------------------------------------- /packages/client/README.md: -------------------------------------------------------------------------------- ```markdown 1 | # Algorand MCP Client 2 | 3 | ## Overview 4 | The Algorand MCP Client provides a unified interface for wallet connectivity and transaction signing. It offers seamless integration with multiple wallet providers and secure local wallet functionality, making it easy to manage Algorand accounts and sign transactions. 5 | 6 | ## Requirements 7 | - Node.js v23.6.1 or later 8 | - npm v10.2.4 or later 9 | 10 | ## Features 11 | - Comprehensive wallet connectivity 12 | - Local wallet with secure storage 13 | - Support for popular external wallets: 14 | - Pera Wallet 15 | - Defly Wallet 16 | - Daffi Wallet 17 | - Secure credential management 18 | - Transaction signing and session management 19 | - TypeScript support with full type definitions 20 | 21 | ## Installation 22 | 23 | To install or update the Algorand MCP implementation, clone the repository, install the dependencies and build the project": 24 | 25 | First check node version to be 23.6.1 or later: 26 | ```bash 27 | node -v 28 | ``` 29 | 30 | Upgrade to 23.6.1 or later if needed! 31 | 32 | Then check the Claude or Cursor container folders to have mcp-servers folder (if not create one): 33 | ```bash 34 | mkdir PATH_ON_YOUR_MACHINE/Claude/mcp-servers 35 | # or for Cursor 36 | mkdir PATH_ON_YOUR_MACHINE/Cursor/mcp-servers 37 | ``` 38 | Then clone this repository under mcp-servers folder and install dependencies: 39 | 40 | ```bash 41 | cd PATH_ON_YOUR_MACHINE/Claude/mcp-servers 42 | # or for Cursor 43 | cd PATH_ON_YOUR_MACHINE/Cursor/mcp-servers 44 | # Clone the repository 45 | git clone https://github.com/GoPlausible/algorand-mcp.git 46 | cd algorand-mcp 47 | # Install dependencies 48 | npm install 49 | # Build the project 50 | npm run build 51 | ``` 52 | And you are done! Now you can open you MCP config and add the server as : 53 | 54 | ```json 55 | { 56 | "mcpServers": { 57 | "algorand-mcp": { 58 | "command": "node", 59 | "args": [ 60 | "PATH_ON_YOUR_MACHINE/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js" 61 | ], 62 | "env": { 63 | "ALGORAND_NETWORK": "testnet", 64 | "ALGORAND_ALGOD_API": "https://testnet-api.algonode.cloud/v2", 65 | "ALGORAND_ALGOD": "https://testnet-api.algonode.cloud", 66 | "ALGORAND_INDEXER_API": "https://testnet-idx.algonode.cloud/v2", 67 | "ALGORAND_INDEXER": "https://testnet-idx.algonode.cloud", 68 | "ALGORAND_ALGOD_PORT": "", 69 | "ALGORAND_INDEXER_PORT": "", 70 | "ALGORAND_TOKEN": "", 71 | "ALGORAND_AGENT_WALLET": "problem aim online jaguar upper oil flight stumble mystery aerobic toy avoid file tomato moment exclude witness guard lab opera crunch noodle dune abandon broccoli", 72 | "NFD_API_URL": "https://api.nf.domains", 73 | "NFD_API_KEY": "", 74 | "TINYMAN_ACTIVE": "false", 75 | "ULTRADE_ACTIVE": "false", 76 | "ULTRADE_API_URL": "https://api.ultrade.io", 77 | "VESTIGE_ACTIVE": "false", 78 | "VESTIGE_API_URL": "https://api.vestigelabs.org", 79 | "VESTIGE_API_KEY": "", 80 | "ITEMS_PER_PAGE": "10" 81 | 82 | } 83 | } 84 | } 85 | } 86 | ``` 87 | Make sure yopu change the paths to match your local system's paths. 88 | 89 | For example on MACOS and Claud, the path would be something like this: 90 | 91 | ```json 92 | { 93 | "mcpServers": { 94 | "algorand-mcp": { 95 | "command": "node", 96 | "args": [ 97 | " /Users/YOUR_USERNAME/Library/Application\ Support/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js" 98 | ] 99 | } 100 | } 101 | } 102 | ``` 103 | 104 | 105 | ## Project Structure 106 | 107 | ``` 108 | src/ 109 | ├── index.ts # Main client implementation and wallet management 110 | ├── LocalWallet.ts # Local wallet implementation 111 | └── env.ts # Environment configuration 112 | ``` 113 | 114 | ## Installation 115 | 116 | ```bash 117 | npm install @algorand-mcp/client 118 | ``` 119 | 120 | ## Features 121 | 122 | ### Universal ES Module Support 123 | - Works in both browser and Node.js environments 124 | - No environment-specific dependencies 125 | - Dynamic imports for Node.js modules 126 | - Browser-compatible credential storage 127 | 128 | ### Wallet Support 129 | 130 | #### Local Wallet 131 | The Local Wallet provides a secure, environment-aware wallet implementation: 132 | 133 | **Browser Environment:** 134 | - Uses the Web Credentials API for secure mnemonic storage 135 | - Encrypted storage of sensitive data 136 | - Persistent across sessions 137 | - No external dependencies 138 | 139 | **Node.js Environment:** 140 | - File-based mnemonic storage 141 | - Encrypted .mnemonic files 142 | - Project directory storage 143 | - Secure file permissions 144 | 145 | **Methods:** 146 | - `connect()`: Creates new account if none exists 147 | - `reconnectSession()`: Reconnects to existing account 148 | - `disconnect()`: Clears current session 149 | - `signTransactions()`: Signs transaction groups 150 | - `makeTransactionSigner()`: Creates algosdk-compatible signer 151 | 152 | #### External Wallets 153 | Support for popular Algorand wallets: 154 | 155 | 1. **Pera Wallet** 156 | - Most widely used Algorand wallet 157 | - Mobile and browser support 158 | - QR code connectivity 159 | 160 | 2. **Defly Wallet** 161 | - Advanced features 162 | - DeFi focused 163 | - Built-in analytics 164 | 165 | 3. **Daffi Wallet** 166 | - User-friendly interface 167 | - Beginner focused 168 | - Simple transaction flow 169 | 170 | **Common Methods:** 171 | - `connect()`: Initiates wallet connection 172 | - `reconnectSession()`: Restores previous session 173 | - `disconnect()`: Ends wallet session 174 | - `signTransactions()`: Signs transaction groups 175 | 176 | ## Usage 177 | 178 | ### Basic Setup 179 | 180 | ```typescript 181 | import { AlgorandMcpClient } from '@algorand-mcp/client'; 182 | 183 | // Initialize client 184 | const client = new AlgorandMcpClient({ 185 | network: 'testnet' // 'mainnet' or 'localnet' 186 | }); 187 | ``` 188 | 189 | ### Local Wallet 190 | 191 | ```typescript 192 | // Connect to local wallet (creates new if none exists) 193 | const [address] = await client.connect('local'); 194 | console.log('Connected address:', address); 195 | 196 | // Sign transactions 197 | const signedTxns = await client.signTransactions([[ 198 | { txn: someTransaction, message: 'Optional message' } 199 | ]]); 200 | 201 | // Get algosdk-compatible signer 202 | const signer = await client.makeTransactionSigner(); 203 | const signedTxn = await signer([transaction], [0]); 204 | 205 | // Disconnect 206 | await client.disconnect(); 207 | ``` 208 | 209 | ### External Wallets 210 | 211 | ```typescript 212 | // Connect to Pera Wallet 213 | const addresses = await client.connect('pera'); 214 | console.log('Connected addresses:', addresses); 215 | 216 | // Sign transaction group 217 | const signedTxns = await client.signTransactions([ 218 | [{ txn: tx1 }, { txn: tx2 }] // Transaction group 219 | ]); 220 | 221 | // Disconnect 222 | await client.disconnect(); 223 | ``` 224 | 225 | ### Session Management 226 | 227 | ```typescript 228 | // Save session for later 229 | const addresses = await client.connect('pera'); 230 | // ... Later, in a new session: 231 | const reconnected = await client.reconnectSession('pera'); 232 | if (reconnected) { 233 | console.log('Session restored'); 234 | } 235 | ``` 236 | 237 | ## Advanced Usage 238 | 239 | ### Multiple Wallet Support 240 | 241 | ```typescript 242 | // Switch between wallets 243 | await client.connect('pera'); 244 | // ... do something with Pera 245 | await client.disconnect(); 246 | 247 | await client.connect('local'); 248 | // ... do something with local wallet 249 | await client.disconnect(); 250 | ``` 251 | 252 | ### Transaction Signing with Messages 253 | 254 | ```typescript 255 | const signedTxns = await client.signTransactions([[ 256 | { 257 | txn: paymentTxn, 258 | message: 'Send 1 ALGO to Bob' 259 | }, 260 | { 261 | txn: assetTxn, 262 | message: 'Opt into ASA' 263 | } 264 | ]]); 265 | ``` 266 | 267 | ### Error Handling 268 | 269 | ```typescript 270 | try { 271 | await client.connect('pera'); 272 | } catch (error) { 273 | if (error.code === 'user-rejected') { 274 | console.log('User rejected connection'); 275 | } else if (error.code === 'wallet-not-found') { 276 | console.log('Wallet not installed'); 277 | } else { 278 | console.error('Unknown error:', error); 279 | } 280 | } 281 | ``` 282 | 283 | ## Environment Variables 284 | 285 | ```bash 286 | # Optional - defaults to testnet 287 | ALGORAND_NETWORK="mainnet" 288 | 289 | # Optional - for custom node URLs 290 | ALGOD_SERVER="http://localhost:4001" 291 | ALGOD_TOKEN="your_token" 292 | ALGOD_PORT="4001" 293 | ``` 294 | 295 | ## Security Considerations 296 | 297 | ### Local Wallet 298 | - Mnemonics are always encrypted before storage 299 | - Secure credential management 300 | - Memory is cleared after use 301 | 302 | ### External Wallets 303 | - No sensitive data is stored by the client 304 | - All signing happens in the wallet 305 | - Session data is encrypted 306 | 307 | ## Best Practices 308 | 309 | 1. **Always handle disconnects:** 310 | ```typescript 311 | window.addEventListener('beforeunload', () => { 312 | client.disconnect(); 313 | }); 314 | ``` 315 | 316 | 2. **Provide clear transaction messages:** 317 | ```typescript 318 | await client.signTransactions([[{ 319 | txn: transaction, 320 | message: 'Clear description of what this does' 321 | }]]); 322 | ``` 323 | 324 | 3. **Check network before connecting:** 325 | ```typescript 326 | if (client.network !== 'mainnet') { 327 | console.warn('Not connected to mainnet!'); 328 | } 329 | ``` 330 | 331 | 4. **Implement proper error handling:** 332 | ```typescript 333 | try { 334 | await client.connect('pera'); 335 | } catch (error) { 336 | handleError(error); 337 | } 338 | ``` 339 | 340 | 5. **Clean up resources:** 341 | ```typescript 342 | async function cleanup() { 343 | await client.disconnect(); 344 | // other cleanup 345 | } 346 | ``` 347 | 348 | ## Troubleshooting 349 | 350 | Common issues and solutions: 351 | 352 | 1. **Wallet not connecting** 353 | - Check if wallet is installed 354 | - Verify network matches wallet 355 | - Clear browser cache if needed 356 | 357 | 2. **Transaction signing fails** 358 | - Verify account has sufficient balance 359 | - Check transaction parameters 360 | - Ensure wallet is still connected 361 | 362 | 3. **Session not restoring** 363 | - Clear stored session data 364 | - Reconnect from scratch 365 | - Check for wallet updates 366 | 367 | ## License 368 | 369 | MIT 370 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- ```markdown 1 | # Algorand MCP Implementation 2 | <!-- [](https://smithery.ai/server/@GoPlausible/algorand-mcp) --> 3 | [](https://www.npmjs.com/package/algorand-mcp) 4 | [](https://badge.fury.io/js/algorand-mcp) 5 | [](https://opensource.org/licenses/MIT) 6 | 7 | ## Overview 8 | 9 | [Model context protocol](https://modelcontextprotocol.io/) or MCP, is an open protocol that standardizes how applications provide context to LLMs. MCP provides specification standards to give LLMs tools, resources and instructions to be more useful and effective. 10 | 11 |  12 | 13 | [MCP Github](https://github.com/modelcontextprotocol) contains more information and different tools and specifications plus documentation of MCP. 14 | 15 | This repository is a Model Context Protocol (MCP) implementation for Algorand blockchain interactions. The implementation consists of: 16 | - (PRODUCTION) A server package for blockchain interactions (Node.js only) 17 | - (WIP) A client package for wallet management and transaction signing (supports both browser and Node.js) 18 | 19 | **📦 Packages in this repository:** 20 | - **[Algorand MCP Server](packages/server/README.md)** - Algorand MCP server full implementation. 21 | - **[Algorand MCP Client](packages/client/README.md)** - Algorand MCP Client for client side Wallet management and transaction signing, as well as integration by other Agent hosts. 22 | 23 | **📦 NPM:** 24 | - **[Algorand MCP Server NPM package](https://www.npmjs.com/package/algorand-mcp)** - Algorand MCP server implementation via NPM package installation. 25 | 26 | <!-- **📦 Smithery:** 27 | - **[Algorand MCP Server on Smithery](https://smithery.ai/server/@GoPlausible/algorand-mcp)** - Algorand MCP server implementation via smithery. --> 28 | 29 | 30 | ## Features 31 | - **Complete Algorand Documentation Integration** 32 | - **Full Algorand knowledge taxonomy** 33 | - **Comprehensive developer documentation** 34 | - **ARCs, SDKs, and tools documentation** 35 | - **Direct document access via knowledge tool** 36 | - Complete Algorand blockchain interaction capabilities 37 | - Extensive wallet management system 38 | - Comprehensive transaction handling 39 | - Rich blockchain state querying 40 | - Built-in security features 41 | - Support for Claude Desktop and Cursor integration 42 | 43 | ## Requirements 44 | - Node.js v23.6.1 or later 45 | - npm v10.2.4 or later 46 | 47 | ## Installation 48 | 49 | To install or update the Algorand MCP implementation, clone the repository, install the dependencies and build the project": 50 | 51 | First check node version to be 23.6.1 or later: 52 | ```bash 53 | node -v 54 | ``` 55 | 56 | Upgrade to 23.6.1 or later if needed! 57 | 58 | Then check the Claude or Cursor container folders to have mcp-servers folder (if not create one): 59 | ```bash 60 | mkdir PATH_ON_YOUR_MACHINE/Claude/mcp-servers 61 | # or for Cursor 62 | mkdir PATH_ON_YOUR_MACHINE/Cursor/mcp-servers 63 | ``` 64 | Then clone this repository under mcp-servers folder and install dependencies: 65 | 66 | ```bash 67 | cd PATH_ON_YOUR_MACHINE/Claude/mcp-servers 68 | # or for Cursor 69 | cd PATH_ON_YOUR_MACHINE/Cursor/mcp-servers 70 | # Clone the repository 71 | git clone https://github.com/GoPlausible/algorand-mcp.git 72 | cd algorand-mcp 73 | # Install dependencies 74 | npm install 75 | # Build the project 76 | npm run build 77 | # Edit the .env file to set your configurations 78 | ``` 79 | And you are done! Now you can open you MCP config and add the server as : 80 | 81 | ```json 82 | { 83 | "mcpServers": { 84 | "algorand-mcp": { 85 | "command": "node", 86 | "args": [ 87 | "PATH_ON_YOUR_MACHINE/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js" 88 | ], 89 | "env": { 90 | "ALGORAND_NETWORK": "testnet", 91 | "ALGORAND_ALGOD_API": "https://testnet-api.algonode.cloud/v2", 92 | "ALGORAND_ALGOD": "https://testnet-api.algonode.cloud", 93 | "ALGORAND_INDEXER_API": "https://testnet-idx.algonode.cloud/v2", 94 | "ALGORAND_INDEXER": "https://testnet-idx.algonode.cloud", 95 | "ALGORAND_ALGOD_PORT": "", 96 | "ALGORAND_INDEXER_PORT": "", 97 | "ALGORAND_TOKEN": "", 98 | "ALGORAND_AGENT_WALLET": "problem aim online jaguar upper oil flight stumble mystery aerobic toy avoid file tomato moment exclude witness guard lab opera crunch noodle dune abandon broccoli", 99 | "NFD_API_URL": "https://api.nf.domains", 100 | "NFD_API_KEY": "", 101 | "TINYMAN_ACTIVE": "false", 102 | "ULTRADE_ACTIVE": "false", 103 | "VESTIGE_ACTIVE": "false", 104 | "ULTRADE_API_URL": "https://api.ultrade.io", 105 | "VESTIGE_API_URL": "https://api.vestigelabs.org", 106 | "VESTIGE_API_KEY": "", 107 | "ITEMS_PER_PAGE": "10" 108 | 109 | } 110 | } 111 | } 112 | } 113 | ``` 114 | Make sure yopu change the paths to match your local system's paths. 115 | 116 | For example on MACOS and Claud, the path would be something like this: 117 | 118 | ```json 119 | { 120 | "mcpServers": { 121 | "algorand-mcp": { 122 | "command": "node", 123 | "args": [ 124 | " /Users/YOUR_USERNAME/Library/Application\ Support/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js" 125 | ] 126 | } 127 | } 128 | } 129 | ``` 130 | 131 | ## Project Architecture 132 | 133 | The project follows a modular architecture with two main packages: 134 | 135 | 1. **Server Package (`@algorand-mcp/server`)** 136 | - Provides MCP tools and resources 137 | - Manages blockchain interactions 138 | - Handles transaction creation and submission 139 | - Offers comprehensive blockchain queries 140 | 141 | 2. **Client Package (`@algorand-mcp/client`)** 142 | - Handles wallet connections and transaction signing 143 | - Supports both local and external wallets 144 | - Universal compatibility (browser/Node.js) 145 | - Secure credential management 146 | - Still work in progress (Server works irrelevant to client status) 147 | 148 | ## Project Structure 149 | 150 | ``` 151 | algorand-mcp/ 152 | ├── packages/ 153 | │ ├── client/ # Client Package 154 | │ │ ├── src/ 155 | │ │ │ ├── index.ts # Client entry point and wallet management 156 | │ │ │ └── LocalWallet.ts # Local wallet implementation 157 | │ │ ├── package.json 158 | │ │ └── tsconfig.json 159 | │ └── server/ # Server Package 160 | │ ├── src/ 161 | │ │ ├── resources/ # MCP Resources (User-invokable endpoints) 162 | │ │ │ ├── knowledge/ # Documentation and taxonomy 163 | │ │ │ │ ├── taxonomy/ # Markdown documentation 164 | │ │ │ │ └── index.ts # Knowledge resource handler 165 | │ │ │ ├── wallet/ # Wallet management 166 | │ │ │ │ └── index.ts # Wallet resource handler 167 | │ │ │ └── index.ts # Resource registration 168 | │ │ ├── tools/ # MCP Tools (Agent-invokable operations) 169 | │ │ │ ├── accountManager.ts # Account operations 170 | │ │ │ ├── algodManager.ts # Node interactions 171 | │ │ │ ├── utilityManager.ts # Utility functions 172 | │ │ │ ├── apiManager/ # API Tools 173 | │ │ │ │ ├── algod/ # Algod API tools 174 | │ │ │ │ ├── indexer/ # Indexer API tools 175 | │ │ │ │ ├── nfd/ # NFDomains tools 176 | │ │ │ │ ├── vestige/ # Vestige DeFi tools 177 | │ │ │ │ ├── tinyman/ # Tinyman AMM tools 178 | │ │ │ │ └── ultrade/ # Ultrade DEX tools 179 | │ │ │ └── transactionManager/ # Transaction handling 180 | │ │ ├── env.ts # Environment configuration 181 | │ │ └── index.ts # Server entry point 182 | │ ├── package.json 183 | │ └── tsconfig.json 184 | ├── package.json # Root package file 185 | └── tsconfig.json # Root TypeScript config 186 | ``` 187 | 188 | ## Core Functionalities 189 | 190 | ### Server Features 191 | - Account management 192 | - Asset operations 193 | - Application interactions 194 | - Transaction creation and submission 195 | - Blockchain state queries 196 | - Comprehensive utility functions 197 | - Standardized response format 198 | - Built-in pagination support 199 | - NFDomains integration 200 | - Vestige DeFi analytics (optional, disabled by default) 201 | - Tinyman AMM integration (optional, disabled by default) 202 | - Ultrade DEX integration (optional, disabled by default) 203 | - Knowledge taxonomy resources: 204 | - Full documentation taxonomy (algorand://knowledge/taxonomy) 205 | - Category-specific documentation: 206 | - ARCs (algorand://knowledge/taxonomy/arcs) 207 | - SDKs (algorand://knowledge/taxonomy/sdks) 208 | - AlgoKit (algorand://knowledge/taxonomy/algokit) 209 | - AlgoKit Utils (algorand://knowledge/taxonomy/algokit-utils) 210 | - TEALScript (algorand://knowledge/taxonomy/tealscript) 211 | - Puya (algorand://knowledge/taxonomy/puya) 212 | - Liquid Auth (algorand://knowledge/taxonomy/liquid-auth) 213 | - Python (algorand://knowledge/taxonomy/python) 214 | - Developer Docs (algorand://knowledge/taxonomy/developers) 215 | - CLI Tools (algorand://knowledge/taxonomy/clis) 216 | - Node Management (algorand://knowledge/taxonomy/nodes) 217 | - Technical Details (algorand://knowledge/taxonomy/details) 218 | 219 | ### Client Features (Work in Progress) 220 | - Local wallet with secure storage 221 | - External wallet support (Pera, Defly, Daffi) 222 | - Transaction signing 223 | - Session management 224 | - Universal ES module support 225 | 226 | ## Response Format 227 | 228 | All responses follow a standardized format: 229 | 230 | ```typescript 231 | { 232 | "data": { 233 | // Response data here 234 | }, 235 | "metadata": { // Only for paginated responses 236 | "totalItems": number, 237 | "itemsPerPage": number, 238 | "currentPage": number, 239 | "totalPages": number, 240 | "hasNextPage": boolean, 241 | "pageToken": string, 242 | "arrayField": string // Name of paginated array field 243 | } 244 | } 245 | ``` 246 | 247 | Errors are returned in a standardized format: 248 | ```typescript 249 | { 250 | "error": { 251 | "code": string, 252 | "message": string 253 | } 254 | } 255 | ``` 256 | 257 | ## Available Tools and Resources 258 | 259 | The Algorand MCP implementation provides 125 tools and resources for blockchain interaction: 260 | - 40 base tools (account, asset, application, transaction management) 261 | - 30 API tools (algod and indexer) 262 | - 6 NFDomains (NFD) tools for name services 263 | - 28 Vestige tools for DeFi analytics 264 | - 9 Tinyman tools for AMM interactions 265 | - 12 Ultrade tools for DEX functionality 266 | 267 | ### API Tools 268 | 269 | #### Algod API Tools 270 | - api_algod_get_account_info: Get current account balance, assets, and auth address 271 | - api_algod_get_account_application_info: Get account-specific application information 272 | - api_algod_get_account_asset_info: Get account-specific asset information 273 | - api_algod_get_application_by_id: Get application information 274 | - api_algod_get_application_box: Get application box by name 275 | - api_algod_get_application_boxes: Get all application boxes 276 | - api_algod_get_asset_by_id: Get current asset information 277 | - api_algod_get_pending_transaction: Get pending transaction information 278 | - api_algod_get_pending_transactions_by_address: Get pending transactions for an address 279 | - api_algod_get_pending_transactions: Get all pending transactions 280 | - api_algod_get_transaction_params: Get suggested transaction parameters 281 | - api_algod_get_node_status: Get current node status 282 | - api_algod_get_node_status_after_block: Get node status after a specific round 283 | 284 | #### Indexer API Tools 285 | - api_indexer_lookup_account_by_id: Get account information 286 | - api_indexer_lookup_account_assets: Get account assets 287 | - api_indexer_lookup_account_app_local_states: Get account application local states 288 | - api_indexer_lookup_account_created_applications: Get applications created by account 289 | - api_indexer_search_for_accounts: Search for accounts with various criteria 290 | - api_indexer_lookup_applications: Get application information 291 | - api_indexer_lookup_application_logs: Get application log messages 292 | - api_indexer_search_for_applications: Search for applications 293 | - api_indexer_lookup_asset_by_id: Get asset information and configuration 294 | - api_indexer_lookup_asset_balances: Get accounts holding this asset 295 | - api_indexer_lookup_asset_transactions: Get transactions involving this asset 296 | - api_indexer_search_for_assets: Search for assets 297 | - api_indexer_lookup_transaction_by_id: Get transaction information 298 | - api_indexer_lookup_account_transactions: Get account transaction history 299 | - api_indexer_search_for_transactions: Search for transactions 300 | 301 | #### NFDomains (NFD) API Tools 302 | - api_nfd_get_nfd: Get NFD by name or application ID 303 | - api_nfd_get_nfds_for_addresses: Get NFDs for specific addresses 304 | - api_nfd_get_nfd_activity: Get activity/changes for NFDs 305 | - api_nfd_get_nfd_analytics: Get analytics data for NFDs 306 | - api_nfd_browse_nfds: Browse NFDs with various filters 307 | - api_nfd_search_nfds: Search NFDs with various filters 308 | 309 | #### Vestige API Tools 310 | 311 | 1. View Tools: 312 | - api_vestige_view_networks: Get all networks 313 | - api_vestige_view_network_by_id: Get network by id 314 | - api_vestige_view_protocols: Get all protocols 315 | - api_vestige_view_protocol_by_id: Get protocol by id 316 | - api_vestige_view_protocol_volumes: Get protocol volumes at specific day 317 | - api_vestige_view_assets: Get data about assets 318 | - api_vestige_view_assets_list: Get asset list 319 | - api_vestige_view_assets_search: Search assets by query 320 | - api_vestige_view_asset_price: Get asset prices 321 | - api_vestige_view_asset_candles: Get asset candles 322 | - api_vestige_view_asset_history: Get asset volume, swaps, total lockup, vwap and confidence history 323 | - api_vestige_view_asset_composition: Get asset lockups based on protocol and pair 324 | - api_vestige_view_pools: Get pools 325 | - api_vestige_view_vaults: Get all vaults 326 | - api_vestige_view_balances: Get balances by network id, protocol id and asset id 327 | - api_vestige_view_notes: Get notes by network id and optionally asset id 328 | - api_vestige_view_first_asset_notes: Get first note for assets 329 | - api_vestige_view_asset_notes_count: Get notes count for assets 330 | - api_vestige_view_swaps: Get swaps 331 | 332 | 2. Swap Tools: 333 | - api_vestige_get_best_v4_swap_data: Get best V4 swap data 334 | - api_vestige_get_v4_swap_discount: Get V4 swap discount 335 | - api_vestige_get_v4_swap_data_transactions: Get V4 swap data transactions 336 | - api_vestige_get_aggregator_stats: Get aggregator stats 337 | 338 | 3. Currency Tools: 339 | - api_vestige_view_currency_prices: Get all latest currency prices 340 | - api_vestige_view_currency_price_history: Get currency prices by timestamp range 341 | - api_vestige_view_currency_price: Get currency price by timestamp 342 | - api_vestige_view_currency_average_price: Get average price for currency 343 | - api_vestige_view_currency_prices_simple_30d: Get currency prices for last 30 days 344 | 345 | #### Tinyman API Tools 346 | - api_tinyman_get_pool: Get Tinyman pool information by asset pair 347 | - api_tinyman_get_pool_analytics: Get analytics for a Tinyman pool 348 | - api_tinyman_get_pool_creation_quote: Get quote for creating a new pool 349 | - api_tinyman_get_liquidity_quote: Get quote for adding liquidity 350 | - api_tinyman_get_remove_liquidity_quote: Get quote for removing liquidity 351 | - api_tinyman_get_swap_quote: Get quote for swapping assets 352 | - api_tinyman_get_asset_optin_quote: Get quote for opting into pool token 353 | - api_tinyman_get_validator_optin_quote: Get quote for opting into validator 354 | - api_tinyman_get_validator_optout_quote: Get quote for opting out of validator 355 | 356 | #### Ultrade API Tools 357 | 1. Wallet Tools: 358 | - api_ultrade_wallet_signin_message: Generate message from the sign in data 359 | - api_ultrade_wallet_signin: Sign in to trading account 360 | - api_ultrade_wallet_add_key: Add a trading key 361 | - api_ultrade_wallet_revoke_key: Revoke a trading key 362 | - api_ultrade_wallet_keys: Get trading keys 363 | - api_ultrade_wallet_key_message: Generate message from the trading key data 364 | - api_ultrade_wallet_trades: Get filtered wallet trades 365 | - api_ultrade_wallet_transactions: Get filtered wallet transactions 366 | - api_ultrade_wallet_withdraw: Withdraw token 367 | - api_ultrade_wallet_withdraw_message: Generate message from the withdrawal data 368 | 369 | 2. Market Tools: 370 | - api_ultrade_market_symbols: Get market symbols 371 | - api_ultrade_market_details: Get market details 372 | - api_ultrade_market_price: Get last market price by pair symbol 373 | - api_ultrade_market_depth: Get order book depth 374 | - api_ultrade_market_last_trades: Get last trades 375 | - api_ultrade_market_history: Get market history 376 | - api_ultrade_market_assets: Get trading assets 377 | - api_ultrade_market_fee_rates: Get fee rates 378 | - api_ultrade_market_chains: Get blockchain chains 379 | - api_ultrade_market_withdrawal_fee: Get withdrawal fee 380 | - api_ultrade_market_operation_details: Get operation details 381 | - api_ultrade_market_settings: Get market settings 382 | - api_ultrade_market_orders: Get orders 383 | - api_ultrade_market_open_orders: Get open orders 384 | - api_ultrade_market_order_by_id: Get order by ID 385 | - api_ultrade_market_order_message: Generate message from the order data 386 | - api_ultrade_market_create_order: Create new order 387 | - api_ultrade_market_create_orders: Create new orders 388 | - api_ultrade_market_cancel_order: Cancel open order 389 | - api_ultrade_market_cancel_orders: Cancel multiple open orders 390 | 391 | 3. System Tools: 392 | - api_ultrade_system_time: Get current system time 393 | - api_ultrade_system_maintenance: Get system maintenance status 394 | - api_ultrade_system_version: Get system version 395 | 396 | ### Account Management Tools 397 | - create_account: Create a new Algorand account 398 | - rekey_account: Rekey an account to a new address 399 | - validate_address: Check if an Algorand address is valid 400 | - encode_address: Encode a public key to an Algorand address 401 | - decode_address: Decode an Algorand address to a public key 402 | 403 | ### Application Tools 404 | - make_app_create_txn: Create an application creation transaction 405 | - make_app_update_txn: Create an application update transaction 406 | - make_app_delete_txn: Create an application delete transaction 407 | - make_app_optin_txn: Create an application opt-in transaction 408 | - make_app_closeout_txn: Create an application close-out transaction 409 | - make_app_clear_txn: Create an application clear state transaction 410 | - make_app_call_txn: Create an application call transaction 411 | - get_application_address: Get the address for a given application ID 412 | - compile_teal: Compile TEAL source code 413 | - disassemble_teal: Disassemble TEAL bytecode back to source 414 | 415 | ### Asset Tools 416 | - make_asset_create_txn: Create an asset creation transaction 417 | - make_asset_config_txn: Create an asset configuration transaction 418 | - make_asset_destroy_txn: Create an asset destroy transaction 419 | - make_asset_freeze_txn: Create an asset freeze transaction 420 | - make_asset_transfer_txn: Create an asset transfer transaction 421 | 422 | ### Transaction Tools 423 | - send_raw_transaction: Submit signed transactions to the network 424 | - simulate_raw_transactions: Simulate raw transactions 425 | - simulate_transactions: Simulate transactions with detailed configuration 426 | - make_payment_txn: Create a payment transaction 427 | - assign_group_id: Assign a group ID to a list of transactions 428 | - sign_transaction: Sign a transaction with a secret key 429 | 430 | ### Key Management Tools 431 | - mnemonic_to_mdk: Convert a mnemonic to a master derivation key 432 | - mdk_to_mnemonic: Convert a master derivation key to a mnemonic 433 | - secret_key_to_mnemonic: Convert a secret key to a mnemonic 434 | - mnemonic_to_secret_key: Convert a mnemonic to a secret key 435 | - seed_from_mnemonic: Generate a seed from a mnemonic 436 | - mnemonic_from_seed: Generate a mnemonic from a seed 437 | - sign_bytes: Sign arbitrary bytes with a secret key 438 | 439 | ### Utility Tools 440 | - bytes_to_bigint: Convert bytes to a BigInt 441 | - bigint_to_bytes: Convert a BigInt to bytes 442 | - encode_uint64: Encode a uint64 to bytes 443 | - decode_uint64: Decode bytes to a uint64 444 | - generate_algorand_uri: Generate an Algorand URI and QR code according to ARC-26 specification 445 | 446 | ## Dependencies 447 | 448 | - algosdk: Algorand JavaScript SDK 449 | - @perawallet/connect: Pera Wallet connector 450 | - @blockshake/defly-connect: Defly Wallet connector 451 | - @daffiwallet/connect: Daffi Wallet connector 452 | 453 | ## License 454 | 455 | MIT 456 | ``` -------------------------------------------------------------------------------- /packages/server/README.md: -------------------------------------------------------------------------------- ```markdown 1 | [](https://smithery.ai/server/@GoPlausible/algorand-mcp) 2 | [](https://badge.fury.io/js/algorand-mcp) 3 | [](https://opensource.org/licenses/MIT) 4 | # Algorand MCP Server 5 | 6 | ## Overview 7 | The Algorand MCP Server provides a comprehensive set of tools and resources for interacting with the Algorand blockchain through the Model Context Protocol (MCP). Running exclusively in Node.js environments, it enables seamless blockchain interactions with built-in support for account management, asset operations, application interactions, and blockchain queries. 8 | 9 | ## Requirements 10 | - Node.js v23.6.1 or later 11 | - npm v10.2.4 or later 12 | 13 | ## Features 14 | - 125 total tools: 15 | - 40 base tools (account, asset, application, transaction management) 16 | - 30 API tools (algod and indexer) 17 | - 6 NFDomains (NFD) tools for name services 18 | - 28 Vestige tools for DeFi analytics 19 | - 9 Tinyman tools for AMM interactions 20 | - 12 Ultrade tools for DEX functionality 21 | - 30 resource endpoints for data access 22 | - Built-in default configuration for quick setup 23 | - Comprehensive transaction management 24 | - Complete application lifecycle support 25 | - Asset creation and management 26 | - Real-time and historical data access 27 | - NFDomains integration for name resolution and management 28 | - Vestige integration for DeFi analytics and tracking (optional, disabled by default) 29 | - Tinyman AMM integration for decentralized trading (optional, disabled by default) 30 | - Ultrade DEX integration for trading and market operations (optional, disabled by default) 31 | 32 | ## Project Structure 33 | 34 | ``` 35 | src/ 36 | ├── resources/ # MCP Resources (User-invokable endpoints) 37 | │ ├── knowledge/ # Documentation and taxonomy 38 | │ │ ├── taxonomy/ # Markdown documentation 39 | │ │ ├── taxonomy-categories/ # Category JSON definitions 40 | │ │ └── index.ts # Knowledge resource handler 41 | │ ├── wallet/ # Wallet management 42 | │ │ └── index.ts # Wallet resource handler 43 | │ └── index.ts # Resource registration 44 | ├── tools/ # MCP Tools (Agent-invokable operations) 45 | │ ├── accountManager.ts # Account operations 46 | │ ├── algodManager.ts # Node interactions 47 | │ ├── utilityManager.ts # Utility functions 48 | │ ├── apiManager/ # API Tools (Agent-accessible resource data) 49 | │ │ ├── algod/ # Algod API tools 50 | │ │ ├── indexer/ # Indexer API tools 51 | │ │ ├── nfd/ # NFDomains tools 52 | │ │ ├── vestige/ # Vestige DeFi tools 53 | │ │ ├── tinyman/ # Tinyman AMM tools 54 | │ │ └── ultrade/ # Ultrade DEX tools 55 | │ └── transactionManager/ # Transaction handling 56 | └── index.ts # Server entry point 57 | ``` 58 | 59 | ## MCP Components 60 | 61 | ### Resources 62 | User-invokable endpoints that provide direct access to data and services: 63 | 64 | 1. Knowledge Resources: 65 | - algorand://knowledge/taxonomy - Full documentation taxonomy 66 | - algorand://knowledge/taxonomy/{category} - Category-specific documentation 67 | 68 | Knowledge Tool: 69 | - get_knowledge_doc - Get markdown content for specified knowledge documents 70 | - Parameters: `{ documents: string[] }` (e.g., ["ARCs:specs:arc-0020.md"]) 71 | - Returns: Document content in markdown format 72 | 73 | 2. Wallet Resources: 74 | - algorand://wallet/account - Account information and balances 75 | - algorand://wallet/assets - Account Asset holdings and details 76 | 77 | ### API Tools 78 | Agent-invokable tools that provide direct access to various Algorand ecosystem APIs. These tools are designed to be used by Agent LLMs to interact with: 79 | 80 | - Algorand Node (algod) API for real-time blockchain data 81 | - Indexer API for historical blockchain data 82 | - NFDomains API for name services 83 | - Vestige API for DeFi analytics 84 | - Tinyman API for AMM operations 85 | - Ultrade API for DEX functionality 86 | 87 | Each API tool follows a consistent naming convention with the `api_` prefix for clarity and better UX. 88 | 89 | ## Installation 90 | 91 | To install or update the Algorand MCP implementation, clone the repository, install the dependencies and build the project": 92 | 93 | First check node version to be 23.6.1 or later: 94 | ```bash 95 | node -v 96 | ``` 97 | 98 | Upgrade to 23.6.1 or later if needed! 99 | 100 | Then check the Claude or Cursor container folders to have mcp-servers folder (if not create one): 101 | ```bash 102 | mkdir PATH_ON_YOUR_MACHINE/Claude/mcp-servers 103 | # or for Cursor 104 | mkdir PATH_ON_YOUR_MACHINE/Cursor/mcp-servers 105 | ``` 106 | Then clone this repository under mcp-servers folder and install dependencies: 107 | 108 | ```bash 109 | cd PATH_ON_YOUR_MACHINE/Claude/mcp-servers 110 | # or for Cursor 111 | cd PATH_ON_YOUR_MACHINE/Cursor/mcp-servers 112 | # Clone the repository 113 | git clone https://github.com/GoPlausible/algorand-mcp.git 114 | cd algorand-mcp 115 | # Install dependencies 116 | npm install 117 | # Build the project 118 | npm run build 119 | # Edit the .env file to set your configurations 120 | ``` 121 | And you are done! Now you can open you MCP config and add the server as : 122 | 123 | ```json 124 | { 125 | "mcpServers": { 126 | "algorand-mcp": { 127 | "command": "node", 128 | "args": [ 129 | "PATH_ON_YOUR_MACHINE/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js" 130 | ], 131 | "env": { 132 | "ALGORAND_NETWORK": "testnet", 133 | "ALGORAND_ALGOD_API": "https://testnet-api.algonode.cloud/v2", 134 | "ALGORAND_ALGOD": "https://testnet-api.algonode.cloud", 135 | "ALGORAND_INDEXER_API": "https://testnet-idx.algonode.cloud/v2", 136 | "ALGORAND_INDEXER": "https://testnet-idx.algonode.cloud", 137 | "ALGORAND_ALGOD_PORT": "", 138 | "ALGORAND_INDEXER_PORT": "", 139 | "ALGORAND_TOKEN": "", 140 | "ALGORAND_AGENT_WALLET": "problem aim online jaguar upper oil flight stumble mystery aerobic toy avoid file tomato moment exclude witness guard lab opera crunch noodle dune abandon broccoli", 141 | "NFD_API_URL": "https://api.nf.domains", 142 | "NFD_API_KEY": "", 143 | "TINYMAN_ACTIVE": "false", 144 | "ULTRADE_ACTIVE": "false", 145 | "ULTRADE_API_URL": "https://api.ultrade.io", 146 | "VESTIGE_ACTIVE": "false", 147 | "VESTIGE_API_URL": "https://api.vestigelabs.org", 148 | "VESTIGE_API_KEY": "", 149 | "ITEMS_PER_PAGE": "10" 150 | 151 | } 152 | } 153 | } 154 | } 155 | ``` 156 | Make sure yopu change the paths to match your local system's paths. 157 | 158 | For example on MACOS and Claud, the path would be something like this: 159 | 160 | ```json 161 | { 162 | "mcpServers": { 163 | "algorand-mcp": { 164 | "command": "node", 165 | "args": [ 166 | " /Users/YOUR_USERNAME/Library/Application\ Support/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js" 167 | ] 168 | } 169 | } 170 | } 171 | ``` 172 | 173 | ## Available Tools 174 | 175 | ### Knowledge Resources 176 | Static URIs for accessing Algorand's comprehensive documentation: 177 | 178 | - algorand://knowledge/taxonomy - Full documentation taxonomy 179 | - algorand://knowledge/taxonomy/arcs - ARCs documentation 180 | - algorand://knowledge/taxonomy/sdks - SDKs documentation 181 | - algorand://knowledge/taxonomy/algokit - AlgoKit documentation 182 | - algorand://knowledge/taxonomy/algokit-utils - AlgoKit Utils documentation 183 | - algorand://knowledge/taxonomy/tealscript - TEALScript documentation 184 | - algorand://knowledge/taxonomy/puya - Puya documentation 185 | - algorand://knowledge/taxonomy/liquid-auth - Liquid Auth documentation 186 | - algorand://knowledge/taxonomy/python - Python development resources 187 | - algorand://knowledge/taxonomy/developers - Developer documentation 188 | - algorand://knowledge/taxonomy/clis - CLI tools documentation 189 | - algorand://knowledge/taxonomy/nodes - Node management documentation 190 | - algorand://knowledge/taxonomy/details - Technical details documentation 191 | 192 | Each resource provides direct access to its respective documentation category in markdown format. 193 | 194 | ### API Tools 195 | API tools are designed to be used by Agent LLMs to perform various operations on the Algorand blockchain and to be easily invokable by LLM Agents. They are categorized into different sections based on their functionality. 196 | 197 | 198 | #### Algod API Tools 199 | - api_algod_get_account_info: Get current account balance, assets, and auth address from algod 200 | - api_algod_get_account_application_info: Get account-specific application information from algod 201 | - api_algod_get_account_asset_info: Get account-specific asset information from algod 202 | - api_algod_get_application_by_id: Get application information 203 | - api_algod_get_application_box: Get application box by name 204 | - api_algod_get_application_boxes: Get all application boxes 205 | - api_algod_get_asset_by_id: Get current asset information from algod 206 | - api_algod_get_pending_transaction: Get pending transaction information 207 | - api_algod_get_pending_transactions_by_address: Get pending transactions for an address 208 | - api_algod_get_pending_transactions: Get all pending transactions 209 | - api_algod_get_transaction_params: Get suggested transaction parameters 210 | - api_algod_get_node_status: Get current node status 211 | - api_algod_get_node_status_after_block: Get node status after a specific round 212 | 213 | #### Indexer API Tools 214 | - api_indexer_lookup_account_by_id: Get account information from indexer 215 | - api_indexer_lookup_account_transactions: Get account transaction history 216 | - api_indexer_lookup_account_assets: Get account assets 217 | - api_indexer_lookup_account_app_local_states: Get account application local states 218 | - api_indexer_lookup_account_created_applications: Get applications created by this account 219 | - api_indexer_lookup_applications: Get application information from indexer 220 | - api_indexer_lookup_application_logs: Get application log messages 221 | - api_indexer_lookup_application_box: Get application box by name 222 | - api_indexer_lookup_application_boxes: Get all application boxes 223 | - api_indexer_lookup_asset_by_id: Get asset information and configuration 224 | - api_indexer_lookup_asset_balances: Get accounts holding this asset and their balances 225 | - api_indexer_lookup_asset_transactions: Get transactions involving this asset 226 | - api_indexer_lookup_transaction_by_id: Get transaction information by ID 227 | - api_indexer_search_accounts: Search for accounts with various criteria 228 | - api_indexer_search_for_applications: Search for applications with various criteria 229 | - api_indexer_search_for_assets: Search for assets with various criteria 230 | - api_indexer_search_for_transactions: Search for transactions with various criteria 231 | 232 | #### NFDomains (NFD) API Tools 233 | - api_nfd_get_nfd: Get a specific NFD by name or application ID 234 | - api_nfd_get_nfds_for_addresses: Get NFDs for specific addresses 235 | - api_nfd_get_nfd_activity: Get activity/changes for NFDs 236 | - api_nfd_get_nfd_analytics: Get analytics data for NFDs 237 | - api_nfd_browse_nfds: Browse NFDs with various filters 238 | - api_nfd_search_nfds: Search NFDs with various filters 239 | 240 | #### Vestige API Tools 241 | 242 | 1. View Tools: 243 | - api_vestige_view_networks: Get all networks 244 | - api_vestige_view_network_by_id: Get network by id 245 | - api_vestige_view_protocols: Get all protocols 246 | - api_vestige_view_protocol_by_id: Get protocol by id 247 | - api_vestige_view_protocol_volumes: Get protocol volumes at specific day 248 | - api_vestige_view_assets: Get data about assets 249 | - api_vestige_view_assets_list: Get asset list 250 | - api_vestige_view_assets_search: Search assets by query 251 | - api_vestige_view_asset_price: Get asset prices 252 | - api_vestige_view_asset_candles: Get asset candles 253 | - api_vestige_view_asset_history: Get asset volume, swaps, total lockup, vwap and confidence history 254 | - api_vestige_view_asset_composition: Get asset lockups based on protocol and pair 255 | - api_vestige_view_pools: Get pools 256 | - api_vestige_view_vaults: Get all vaults 257 | - api_vestige_view_balances: Get balances by network id, protocol id and asset id 258 | - api_vestige_view_notes: Get notes by network id and optionally asset id 259 | - api_vestige_view_first_asset_notes: Get first note for assets 260 | - api_vestige_view_asset_notes_count: Get notes count for assets 261 | - api_vestige_view_swaps: Get swaps 262 | 263 | 2. Swap Tools: 264 | - api_vestige_get_best_v4_swap_data: Get best V4 swap data 265 | - api_vestige_get_v4_swap_discount: Get V4 swap discount 266 | - api_vestige_get_v4_swap_data_transactions: Get V4 swap data transactions 267 | - api_vestige_get_aggregator_stats: Get aggregator stats 268 | 269 | 3. Currency Tools: 270 | - api_vestige_view_currency_prices: Get all latest currency prices 271 | - api_vestige_view_currency_price_history: Get currency prices by timestamp range 272 | - api_vestige_view_currency_price: Get currency price by timestamp 273 | - api_vestige_view_currency_average_price: Get average price for currency 274 | - api_vestige_view_currency_prices_simple_30d: Get currency prices for last 30 days 275 | 276 | #### Tinyman API Tools 277 | - api_tinyman_get_pool: Get Tinyman pool information by asset pair 278 | - Parameters: asset1Id, asset2Id, version (v1_1 or v2) 279 | - Returns: Pool status, validator app ID, assets, and reserves 280 | 281 | - api_tinyman_get_pool_analytics: Get analytics for a Tinyman pool 282 | - Parameters: asset1Id, asset2Id, version 283 | - Returns: Pool status, emptiness check, pair ratio, and reserves 284 | 285 | - api_tinyman_get_pool_creation_quote: Get quote for creating a new pool 286 | - Parameters: asset1Id, asset2Id, initiatorAddr, version 287 | - Returns: Transaction count and estimated fees 288 | 289 | - api_tinyman_get_liquidity_quote: Get quote for adding liquidity 290 | - Parameters: asset1Id, asset2Id, asset1Amount, asset2Amount, mode (initial/flexible/singleAsset), version 291 | - Returns: Liquidity quote with expected pool tokens 292 | 293 | - api_tinyman_get_remove_liquidity_quote: Get quote for removing liquidity 294 | - Parameters: asset1Id, asset2Id, poolTokenAmount, initiatorAddr, slippage, singleAssetMode, version 295 | - Returns: Remove liquidity quote with expected asset amounts 296 | 297 | - api_tinyman_get_swap_quote: Get quote for swapping assets 298 | - Parameters: assetIn, assetOut, amount, mode (fixedInput/fixedOutput), version 299 | - Returns: Swap quote with expected output/input amount 300 | 301 | - api_tinyman_get_asset_optin_quote: Get quote for opting into pool token 302 | - Parameters: assetId, initiatorAddr 303 | - Returns: Transaction count and estimated fees 304 | 305 | - api_tinyman_get_validator_optin_quote: Get quote for opting into validator 306 | - Parameters: initiatorAddr, version 307 | - Returns: Transaction count and estimated fees 308 | 309 | - api_tinyman_get_validator_optout_quote: Get quote for opting out of validator 310 | - Parameters: initiatorAddr, version 311 | - Returns: Transaction count and estimated fees 312 | 313 | #### Ultrade API Tools 314 | 315 | 1. Wallet Tools: 316 | - api_ultrade_wallet_signin_message: Generate message from the sign in data 317 | - Parameters: data (address, technology), customMessage (optional) 318 | - Returns: Message to be signed 319 | 320 | - api_ultrade_wallet_signin: Sign in to trading account 321 | - Parameters: message, signature, data (address, technology), referralToken (optional) 322 | - Returns: Session token 323 | 324 | - api_ultrade_wallet_add_key: Add a trading key 325 | - Parameters: message, signature, walletAddress, walletToken 326 | - Returns: Trading key details 327 | 328 | - api_ultrade_wallet_revoke_key: Revoke a trading key 329 | - Parameters: message, signature, walletAddress, walletToken 330 | - Returns: Operation status 331 | 332 | - api_ultrade_wallet_keys: Get trading keys 333 | - Parameters: walletAddress, walletToken 334 | - Returns: List of trading keys 335 | 336 | - api_ultrade_wallet_key_message: Generate message from the trading key data 337 | - Parameters: tkAddress, loginAddress, loginChainId, expiredDate (optional), addKey, type 338 | - Returns: Message to be signed 339 | 340 | - api_ultrade_wallet_trades: Get filtered wallet trades 341 | - Parameters: walletAddress, walletToken (optional), tradingKey (optional) 342 | - Returns: List of trades 343 | 344 | - api_ultrade_wallet_transactions: Get filtered wallet transactions 345 | - Parameters: walletAddress, walletToken (optional), tradingKey (optional) 346 | - Returns: List of transactions 347 | 348 | - api_ultrade_wallet_withdraw: Withdraw token 349 | - Parameters: message, signature, walletAddress, walletToken 350 | - Returns: Withdrawal status 351 | 352 | - api_ultrade_wallet_withdraw_message: Generate message from the withdrawal data 353 | - Parameters: data (withdrawal details), customMessage (optional) 354 | - Returns: Message to be signed 355 | 356 | 2. Market Tools: 357 | - api_ultrade_market_symbols: Get market symbols 358 | - Returns: List of available trading pairs 359 | 360 | - api_ultrade_market_details: Get market details 361 | - Parameters: symbol 362 | - Returns: Detailed market information 363 | 364 | - api_ultrade_market_price: Get last market price by pair symbol 365 | - Parameters: symbol 366 | - Returns: Current market price 367 | 368 | - api_ultrade_market_depth: Get order book depth 369 | - Parameters: symbol, depth 370 | - Returns: Order book with bids and asks 371 | 372 | - api_ultrade_market_last_trades: Get last trades 373 | - Parameters: symbol, limit (optional) 374 | - Returns: Recent trade history 375 | 376 | - api_ultrade_market_history: Get market history 377 | - Parameters: symbol, interval, startTime, endTime, limit (optional) 378 | - Returns: Historical market data 379 | 380 | - api_ultrade_market_assets: Get trading assets 381 | - Returns: List of supported assets 382 | 383 | - api_ultrade_market_fee_rates: Get fee rates 384 | - Returns: Current trading fee rates 385 | 386 | - api_ultrade_market_chains: Get blockchain chains 387 | - Returns: Supported blockchain networks 388 | 389 | - api_ultrade_market_withdrawal_fee: Get withdrawal fee 390 | - Parameters: tokenIndex, tokenChainId, recipientChainId 391 | - Returns: Withdrawal fee information 392 | 393 | - api_ultrade_market_operation_details: Get operation details 394 | - Parameters: operationId 395 | - Returns: Operation status and details 396 | 397 | - api_ultrade_market_settings: Get market settings 398 | - Parameters: domain 399 | - Returns: Market configuration 400 | 401 | - api_ultrade_market_orders: Get orders 402 | - Parameters: walletAddress, walletToken, tradingKey (optional), companyId (optional) 403 | - Returns: List of orders 404 | 405 | - api_ultrade_market_open_orders: Get open orders 406 | - Parameters: walletAddress, walletToken, tradingKey (optional), symbol (optional) 407 | - Returns: List of active orders 408 | 409 | - api_ultrade_market_order_by_id: Get order by ID 410 | - Parameters: orderId, walletAddress, walletToken, tradingKey (optional) 411 | - Returns: Order details 412 | 413 | - api_ultrade_market_order_message: Generate message from the order data 414 | - Parameters: data (order details) 415 | - Returns: Message to be signed 416 | 417 | - api_ultrade_market_create_order: Create new order 418 | - Parameters: message, signature, walletAddress, walletToken 419 | - Returns: Order creation status 420 | 421 | - api_ultrade_market_create_orders: Create new orders 422 | - Parameters: orders (array of message/signature pairs), walletAddress, walletToken 423 | - Returns: Batch order creation status 424 | 425 | - api_ultrade_market_cancel_order: Cancel open order 426 | - Parameters: orderId, walletAddress, walletToken 427 | - Returns: Order cancellation status 428 | 429 | - api_ultrade_market_cancel_orders: Cancel multiple open orders 430 | - Parameters: orderIds, walletAddress, walletToken 431 | - Returns: Batch cancellation status 432 | 433 | 3. System Tools: 434 | - api_ultrade_system_time: Get current system time 435 | - Returns: Server timestamp 436 | 437 | - api_ultrade_system_maintenance: Get system maintenance status 438 | - Returns: Maintenance mode information 439 | 440 | - api_ultrade_system_version: Get system version 441 | - Returns: Current API version 442 | 443 | ### Account Management Tools 444 | 445 | 1. `create_account` 446 | - Creates a new Algorand account 447 | - Returns address and mnemonic 448 | - No parameters required 449 | 450 | 2. `rekey_account` 451 | - Rekeys an account to a new address 452 | - Parameters: 453 | ```typescript 454 | { 455 | sourceAddress: string, // Account to rekey 456 | targetAddress: string // New authorized address 457 | } 458 | ``` 459 | 460 | 3. `mnemonic_to_mdk` 461 | - Converts mnemonic to master derivation key 462 | - Parameters: `{ mnemonic: string }` 463 | 464 | 4. `mdk_to_mnemonic` 465 | - Converts master derivation key to mnemonic 466 | - Parameters: `{ mdk: string }` 467 | 468 | 5. `secret_key_to_mnemonic` 469 | - Converts secret key to mnemonic 470 | - Parameters: `{ secretKey: string }` 471 | 472 | 6. `mnemonic_to_secret_key` 473 | - Converts mnemonic to secret key 474 | - Parameters: `{ mnemonic: string }` 475 | 476 | 7. `seed_from_mnemonic` 477 | - Generates seed from mnemonic 478 | - Parameters: `{ mnemonic: string }` 479 | 480 | 8. `mnemonic_from_seed` 481 | - Generates mnemonic from seed 482 | - Parameters: `{ seed: string }` 483 | 484 | 9. `validate_address` 485 | - Validates Algorand address format 486 | - Parameters: `{ address: string }` 487 | 488 | 10. `encode_address` 489 | - Encodes public key to address 490 | - Parameters: `{ publicKey: string }` 491 | 492 | 11. `decode_address` 493 | - Decodes address to public key 494 | - Parameters: `{ address: string }` 495 | 496 | ### Application Tools 497 | 498 | 12. `make_app_create_txn` 499 | - Creates application creation transaction 500 | - Parameters: 501 | ```typescript 502 | { 503 | from: string, 504 | approvalProgram: string, 505 | clearProgram: string, 506 | numGlobalByteSlices: number, 507 | numGlobalInts: number, 508 | numLocalByteSlices: number, 509 | numLocalInts: number, 510 | extraPages?: number, 511 | note?: string, 512 | lease?: string, 513 | rekeyTo?: string, 514 | appArgs?: string[], 515 | accounts?: string[], 516 | foreignApps?: number[], 517 | foreignAssets?: number[] 518 | } 519 | ``` 520 | 521 | 13. `make_app_update_txn` 522 | - Creates application update transaction 523 | - Parameters: Similar to create with appIndex 524 | 525 | 14. `make_app_delete_txn` 526 | - Creates application deletion transaction 527 | - Parameters: `{ from: string, appIndex: number }` 528 | 529 | 15. `make_app_optin_txn` 530 | - Creates application opt-in transaction 531 | - Parameters: `{ from: string, appIndex: number }` 532 | 533 | 16. `make_app_closeout_txn` 534 | - Creates application close-out transaction 535 | - Parameters: `{ from: string, appIndex: number }` 536 | 537 | 17. `make_app_clear_txn` 538 | - Creates application clear state transaction 539 | - Parameters: `{ from: string, appIndex: number }` 540 | 541 | 18. `make_app_call_txn` 542 | - Creates application call transaction 543 | - Parameters: 544 | ```typescript 545 | { 546 | from: string, 547 | appIndex: number, 548 | appArgs?: string[], 549 | accounts?: string[], 550 | foreignApps?: number[], 551 | foreignAssets?: number[] 552 | } 553 | ``` 554 | 555 | 19. `get_application_address` 556 | - Gets application's escrow address 557 | - Parameters: `{ appId: number }` 558 | 559 | ### Asset Tools 560 | 561 | 20. `make_asset_create_txn` 562 | - Creates asset creation transaction 563 | - Parameters: 564 | ```typescript 565 | { 566 | from: string, 567 | total: number, 568 | decimals: number, 569 | defaultFrozen: boolean, 570 | unitName?: string, 571 | assetName?: string, 572 | assetURL?: string, 573 | assetMetadataHash?: string, 574 | manager?: string, 575 | reserve?: string, 576 | freeze?: string, 577 | clawback?: string 578 | } 579 | ``` 580 | 581 | 21. `make_asset_config_txn` 582 | - Creates asset configuration transaction 583 | - Parameters: 584 | ```typescript 585 | { 586 | from: string, 587 | assetIndex: number, 588 | manager?: string, 589 | reserve?: string, 590 | freeze?: string, 591 | clawback?: string, 592 | strictEmptyAddressChecking: boolean 593 | } 594 | ``` 595 | 596 | 22. `make_asset_destroy_txn` 597 | - Creates asset destruction transaction 598 | - Parameters: `{ from: string, assetIndex: number }` 599 | 600 | 23. `make_asset_freeze_txn` 601 | - Creates asset freeze transaction 602 | - Parameters: 603 | ```typescript 604 | { 605 | from: string, 606 | assetIndex: number, 607 | freezeTarget: string, 608 | freezeState: boolean 609 | } 610 | ``` 611 | 612 | 24. `make_asset_transfer_txn` 613 | - Creates asset transfer transaction 614 | - Parameters: 615 | ```typescript 616 | { 617 | from: string, 618 | to: string, 619 | assetIndex: number, 620 | amount: number, 621 | closeRemainderTo?: string 622 | } 623 | ``` 624 | 625 | ### Transaction Tools 626 | 627 | 25. `make_payment_txn` 628 | - Creates payment transaction 629 | - Parameters: 630 | ```typescript 631 | { 632 | from: string, 633 | to: string, 634 | amount: number, 635 | closeRemainderTo?: string 636 | } 637 | ``` 638 | 639 | 26. `assign_group_id` 640 | - Assigns group ID to transactions 641 | - Parameters: `{ transactions: Transaction[] }` 642 | 643 | 27. `sign_transaction` 644 | - Signs transaction with secret key 645 | - Parameters: 646 | ```typescript 647 | { 648 | transaction: Transaction, 649 | sk: string 650 | } 651 | ``` 652 | 653 | 28. `sign_bytes` 654 | - Signs arbitrary bytes 655 | - Parameters: `{ bytes: string, sk: string }` 656 | 657 | 29. `send_raw_transaction` 658 | - Broadcasts signed transactions 659 | - Parameters: `{ signedTxns: string[] }` 660 | 661 | 30. `simulate_raw_transactions` 662 | - Simulates raw transactions 663 | - Parameters: `{ txns: string[] }` 664 | 665 | ### Key Management Tools 666 | 667 | 31. `generate_key_pair` 668 | - Generates new public/private key pair 669 | - Parameters: None 670 | - Returns: `{ publicKey: string, privateKey: string }` 671 | 672 | 32. `derive_key` 673 | - Derives a key from a master key 674 | - Parameters: `{ masterKey: string, index: number }` 675 | 676 | ### Utility Tools 677 | 678 | 33. `encode_obj` 679 | - Encodes object to msgpack 680 | - Parameters: `{ obj: any }` 681 | 682 | 34. `decode_obj` 683 | - Decodes msgpack to object 684 | - Parameters: `{ bytes: string }` 685 | 686 | 35. `bytes_to_bigint` 687 | - Converts bytes to BigInt 688 | - Parameters: `{ bytes: string }` 689 | 690 | 36. `bigint_to_bytes` 691 | - Converts BigInt to bytes 692 | - Parameters: `{ value: string, size: number }` 693 | 694 | 37. `encode_uint64` 695 | - Encodes uint64 to bytes 696 | - Parameters: `{ value: string }` 697 | 698 | 38. `decode_uint64` 699 | - Decodes bytes to uint64 700 | - Parameters: `{ bytes: string }` 701 | 702 | 39. `compile_teal` 703 | - Compiles TEAL source code 704 | - Parameters: `{ source: string }` 705 | 706 | 40. `disassemble_teal` 707 | - Disassembles TEAL bytecode 708 | - Parameters: `{ bytecode: string }` 709 | 710 | ## Available Resources 711 | 712 | ### Algod Resources (Real-time State) 713 | 714 | 1. `algorand://algod/accounts/{address}` 715 | - Gets current account information 716 | - Returns: Balance, assets, auth address 717 | 718 | 2. `algorand://algod/accounts/{address}/application/{app-id}` 719 | - Gets account's application state 720 | - Returns: Local state for specific app 721 | 722 | 3. `algorand://algod/accounts/{address}/asset/{asset-id}` 723 | - Gets account's asset holding 724 | - Returns: Asset balance and frozen state 725 | 726 | 4. `algorand://algod/applications/{app-id}` 727 | - Gets application information 728 | - Returns: Global state, creator, approval/clear programs 729 | 730 | 5. `algorand://algod/applications/{app-id}/box/{name}` 731 | - Gets application box contents 732 | - Returns: Box value 733 | 734 | 6. `algorand://algod/applications/{app-id}/boxes` 735 | - Lists all application boxes 736 | - Returns: Box names and sizes 737 | 738 | 7. `algorand://algod/assets/{asset-id}` 739 | - Gets asset information 740 | - Returns: Asset parameters and current state 741 | 742 | 8. `algorand://algod/transactions/pending/{txid}` 743 | - Gets pending transaction 744 | - Returns: Transaction details 745 | 746 | 9. `algorand://algod/accounts/{address}/transactions/pending` 747 | - Lists pending transactions for account 748 | - Returns: Array of transactions 749 | 750 | 10. `algorand://algod/transactions/pending` 751 | - Lists all pending transactions 752 | - Returns: Array of transactions 753 | 754 | 11. `algorand://algod/transactions/params` 755 | - Gets suggested parameters 756 | - Returns: Current network parameters 757 | 758 | 12. `algorand://algod/status` 759 | - Gets node status 760 | - Returns: Current round, versions 761 | 762 | ### Block Resources 763 | 764 | 1. `algorand://algod/blocks/latest` 765 | - Gets latest block information 766 | - Returns: Latest block header and transactions 767 | 768 | 2. `algorand://algod/blocks/{round}` 769 | - Gets specific block information 770 | - Returns: Block header and transactions 771 | 772 | 3. `algorand://algod/blocks/{round}/transactions` 773 | - Gets transactions in specific block 774 | - Returns: Array of transactions 775 | 776 | 4. `algorand://indexer/blocks/{round}` 777 | - Gets historical block information 778 | - Returns: Block details with transactions 779 | 780 | ### Health Resources 781 | 782 | 5. `algorand://algod/health` 783 | - Gets node health status 784 | - Returns: Node health information 785 | 786 | 6. `algorand://indexer/health` 787 | - Gets indexer health status 788 | - Returns: Indexer health information 789 | 790 | ### Genesis Resources 791 | 792 | 7. `algorand://algod/genesis` 793 | - Gets genesis information 794 | - Returns: Network genesis configuration 795 | 796 | 8. `algorand://indexer/genesis` 797 | - Gets historical genesis information 798 | - Returns: Network genesis details 799 | 800 | ### Network Resources 801 | 802 | 9. `algorand://algod/versions` 803 | - Gets supported protocol versions 804 | - Returns: Supported versions information 805 | 806 | 10. `algorand://algod/metrics` 807 | - Gets node metrics 808 | - Returns: Performance metrics 809 | 810 | ### Supply Resources 811 | 812 | 11. `algorand://algod/ledger/supply` 813 | - Gets current supply information 814 | - Returns: Total and online stake 815 | 816 | 12. `algorand://indexer/supply` 817 | - Gets historical supply information 818 | - Returns: Historical supply data 819 | 820 | ### Participation Resources 821 | 822 | 13. `algorand://algod/participation` 823 | - Gets participation key information 824 | - Returns: Key registration info 825 | 826 | 14. `algorand://algod/participation/keys` 827 | - Lists participation keys 828 | - Returns: Array of keys 829 | 830 | 15. `algorand://algod/participation/keys/{id}` 831 | - Gets specific participation key 832 | - Returns: Key details 833 | 834 | ### Fee Resources 835 | 836 | 16. `algorand://algod/transactions/fee` 837 | - Gets suggested fee 838 | - Returns: Current fee information 839 | 840 | 17. `algorand://indexer/fee-distribution` 841 | - Gets historical fee distribution 842 | - Returns: Fee statistics 843 | 844 | ### Protocol Resources 845 | 846 | 18. `algorand://algod/protocol` 847 | - Gets current protocol parameters 848 | - Returns: Protocol configuration 849 | 850 | 19. `algorand://indexer/protocol-upgrades` 851 | - Gets protocol upgrade history 852 | - Returns: Upgrade information 853 | 854 | ### Node Resources 855 | 856 | 20. `algorand://algod/ready` 857 | - Checks if node is ready 858 | - Returns: Readiness status 859 | 860 | 21. `algorand://algod/sync` 861 | - Gets node sync status 862 | - Returns: Sync information 863 | 864 | 22. `algorand://algod/peers` 865 | - Lists connected peers 866 | - Returns: Peer information 867 | 868 | 23. `algorand://algod/catchup` 869 | - Gets catchup information 870 | - Returns: Catchup status 871 | 872 | ### Compile Resources 873 | 874 | 24. `algorand://algod/compile/teal` 875 | - Compiles TEAL program 876 | - Returns: Compilation result 877 | 878 | 25. `algorand://algod/compile/teal/disassemble` 879 | - Disassembles TEAL bytecode 880 | - Returns: Source code 881 | 882 | 26. `algorand://algod/compile/teal/dryrun` 883 | - Dry runs TEAL program 884 | - Returns: Execution result 885 | 886 | ### Debug Resources 887 | 888 | 27. `algorand://algod/debug/accounts/{address}` 889 | - Gets detailed account debug info 890 | - Returns: Internal state 891 | 892 | 28. `algorand://algod/debug/txns/{txid}` 893 | - Gets transaction debug info 894 | - Returns: Execution details 895 | 896 | 29. `algorand://algod/debug/blocks/{round}` 897 | - Gets block debug info 898 | - Returns: Internal state 899 | 900 | 30. `algorand://algod/debug/ledger` 901 | - Gets ledger debug info 902 | - Returns: Database state 903 | 904 | ### Indexer Resources (Historical Data) 905 | 906 | 31. `algorand://indexer/accounts/{address}` 907 | - Gets account history 908 | - Returns: Historical account state 909 | 910 | 32. `algorand://indexer/accounts/{address}/transactions` 911 | - Gets account transactions 912 | - Returns: Transaction history 913 | 914 | 33. `algorand://indexer/accounts/{address}/apps-local-state` 915 | - Gets account's application states 916 | - Returns: All local states 917 | 918 | 34. `algorand://indexer/accounts/{address}/created-applications` 919 | - Gets created applications 920 | - Returns: Applications created by account 921 | 922 | 35. `algorand://indexer/applications/{app-id}` 923 | - Gets application history 924 | - Returns: Historical application state 925 | 926 | 36. `algorand://indexer/applications/{app-id}/logs` 927 | - Gets application logs 928 | - Returns: Historical log messages 929 | 930 | 37. `algorand://indexer/applications/{app-id}/box/{name}` 931 | - Gets historical box state 932 | - Returns: Box value at specific round 933 | 934 | 38. `algorand://indexer/applications/{app-id}/boxes` 935 | - Lists historical boxes 936 | - Returns: Box names at specific round 937 | 938 | 39. `algorand://indexer/applications` 939 | - Searches applications 940 | - Returns: Matching applications 941 | 942 | 40. `algorand://indexer/assets/{asset-id}` 943 | - Gets asset history 944 | - Returns: Historical asset state 945 | 946 | 41. `algorand://indexer/assets/{asset-id}/balances` 947 | - Gets asset holders 948 | - Returns: Accounts holding asset 949 | 950 | 42. `algorand://indexer/assets/{asset-id}/transactions` 951 | - Gets asset transactions 952 | - Returns: Transactions involving asset 953 | 954 | 43. `algorand://indexer/assets/{asset-id}/balances/{address}` 955 | - Gets historical asset balance 956 | - Returns: Account's asset balance 957 | 958 | 44. `algorand://indexer/assets/{asset-id}/transactions/{txid}` 959 | - Gets specific asset transaction 960 | - Returns: Transaction details 961 | 962 | 45. `algorand://indexer/assets` 963 | - Searches assets 964 | - Returns: Matching assets 965 | 966 | 46. `algorand://indexer/transactions/{txid}` 967 | - Gets transaction details 968 | - Returns: Historical transaction 969 | 970 | 47. `algorand://indexer/transactions` 971 | - Searches transactions 972 | - Returns: Matching transactions 973 | 974 | ## Response Format 975 | 976 | All responses follow a standardized format using ResponseProcessor: 977 | 978 | ```typescript 979 | { 980 | "data": { 981 | // Response data here 982 | }, 983 | "metadata": { // Only for paginated responses 984 | "totalItems": number, 985 | "itemsPerPage": number, 986 | "currentPage": number, 987 | "totalPages": number, 988 | "hasNextPage": boolean, 989 | "pageToken": string, 990 | "arrayField": string // Name of paginated array field 991 | } 992 | } 993 | ``` 994 | 995 | 996 | ## Error Handling 997 | 998 | The server provides detailed error messages for common issues: 999 | 1000 | - Invalid parameters 1001 | - Network connection errors 1002 | - Transaction failures 1003 | - Resource not found errors 1004 | - Authorization errors 1005 | 1006 | Errors are returned in a standardized format: 1007 | ```typescript 1008 | { 1009 | "error": { 1010 | "code": string, 1011 | "message": string 1012 | } 1013 | } 1014 | ``` 1015 | 1016 | 1017 | ## License 1018 | MIT 1019 | ``` -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- ```markdown 1 | # Contributing to Algorand MCP 2 | 3 | This guide will help you understand how to contribute new tools to the Algorand MCP server. We follow strict patterns and conventions to maintain code quality and consistency. 4 | 5 | ## Project Structure 6 | 7 | ``` 8 | packages/server/src/ 9 | ├── tools/ 10 | │ ├── apiManager/ # Resource-specific tool implementations 11 | │ │ ├── [provider]/ # Provider-specific directory (e.g., tinyman, ultrade) 12 | │ │ │ ├── index.ts # Exports all tools 13 | │ │ │ └── [feature].ts # Feature-specific implementations 14 | │ └── utils/ # Shared utilities 15 | │ └── responseProcessor.ts # Response formatting utility 16 | ├── algorand-client/ # Algorand client integration 17 | │ └── index.ts # Client initialization and configuration 18 | └── API specs/ # API specifications and documentation 19 | ``` 20 | 21 | ## Adding New Tools 22 | 23 | ### 1. Create Provider Directory 24 | 25 | Create a new directory under `packages/server/src/tools/apiManager/` for your provider: 26 | 27 | ```bash 28 | mkdir packages/server/src/tools/apiManager/your-provider 29 | ``` 30 | 31 | ### 2. Implement Tool Handlers 32 | 33 | Create separate files for different features. Each file should: 34 | - Export tool handlers 35 | - Define input schemas 36 | - Implement error handling 37 | - Include documentation 38 | 39 | Example structure: 40 | 41 | ```typescript 42 | // packages/server/src/tools/apiManager/your-provider/feature.ts 43 | 44 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; 45 | 46 | // Define input schema 47 | export const featureToolSchema = { 48 | type: 'object', 49 | properties: { 50 | param1: { 51 | type: 'string', 52 | description: 'Description of parameter' 53 | }, 54 | // ... other parameters 55 | }, 56 | required: ['param1'] 57 | }; 58 | 59 | // Implement tool handler 60 | export const featureTool = async (args: any) => { 61 | try { 62 | // Input validation 63 | if (!args.param1) { 64 | throw new McpError( 65 | ErrorCode.InvalidParams, 66 | 'Missing required parameter: param1' 67 | ); 68 | } 69 | 70 | // Implementation 71 | const result = await yourImplementation(args); 72 | 73 | // Return result directly - MCP server handles wrapping 74 | return result; 75 | } catch (error) { 76 | // Error handling 77 | if (error instanceof McpError) { 78 | throw error; 79 | } 80 | throw new McpError( 81 | ErrorCode.InternalError, 82 | `Feature operation failed: ${error.message}` 83 | ); 84 | } 85 | }; 86 | ``` 87 | 88 | ### 3. Create Index File 89 | 90 | Create an `index.ts` file to export all tools: 91 | 92 | ```typescript 93 | // packages/server/src/tools/apiManager/your-provider/index.ts 94 | 95 | import { McpError, ErrorCode, Tool } from '@modelcontextprotocol/sdk/types.js'; 96 | import { featureTool, featureToolSchema } from './feature.js'; 97 | 98 | // Define tool configurations 99 | export const providerTools: Tool[] = [ 100 | { 101 | name: 'api_provider_feature', 102 | description: 'Feature description', 103 | handler: featureTool, 104 | inputSchema: featureToolSchema 105 | } 106 | ]; 107 | 108 | // Handle provider tools 109 | export async function handleProviderTools(name: string, args: any): Promise<any> { 110 | switch (name) { 111 | case 'api_provider_feature': 112 | return featureTool(args); 113 | default: 114 | throw new McpError( 115 | ErrorCode.MethodNotFound, 116 | `Unknown tool: ${name}` 117 | ); 118 | } 119 | } 120 | ``` 121 | 122 | ## Code Style Guidelines 123 | 124 | 1. **TypeScript** 125 | - Use strict type checking 126 | - Define interfaces for all data structures 127 | - Use type guards for runtime checks 128 | 129 | 2. **Async/Await** 130 | - Use async/await for asynchronous operations 131 | - Properly handle promises and errors 132 | 133 | 3. **Error Handling** 134 | - Use McpError for standardized error reporting 135 | - Include descriptive error messages 136 | - Add appropriate error context 137 | 138 | 4. **Naming Conventions** 139 | - PascalCase for classes and types 140 | - camelCase for functions and variables 141 | - snake_case for tool names 142 | 143 | ## Response Processing 144 | 145 | ### ResponseProcessor Overview 146 | The ResponseProcessor is a utility class that handles response formatting and pagination in a standardized way. It provides: 147 | 1. Automatic pagination for large arrays and objects 148 | 2. Consistent response wrapping 149 | 3. Deep object traversal and processing 150 | 4. Page token generation and handling 151 | 152 | ### Key Features 153 | 1. **Automatic Pagination** 154 | - Handles arrays longer than `env.items_per_page` 155 | - Generates page tokens for navigation 156 | - Maintains metadata about pagination state 157 | 158 | 2. **Deep Object Processing** 159 | - Recursively processes nested objects 160 | - Handles arrays at any level of nesting 161 | - Preserves object structure while paginating 162 | 163 | 3. **Smart Pagination** 164 | - Skips pagination for special cases (e.g., application global-state) 165 | - Handles both arrays and objects with many keys 166 | - Preserves data integrity during pagination 167 | 168 | ### Usage Patterns 169 | 170 | 1. **Direct Usage** 171 | ```typescript 172 | import { ResponseProcessor } from '../../utils/responseProcessor.js'; 173 | 174 | // Process a simple response 175 | const result = ResponseProcessor.processResponse(data); 176 | 177 | // Process with pagination 178 | const result = ResponseProcessor.processResponse(data, pageToken); 179 | ``` 180 | 181 | 2. **Response Structure** 182 | ```typescript 183 | // Input: Any data structure 184 | const data = { 185 | field1: 'value1', 186 | arrayField: [1, 2, 3, ...], 187 | nestedObject: { 188 | subArray: [...] 189 | } 190 | }; 191 | 192 | // Output: Processed and paginated response 193 | { 194 | content: [{ 195 | type: 'text', 196 | text: JSON.stringify({ 197 | data: { 198 | field1: 'value1', 199 | arrayField: [1, 2, 3], // Paginated if needed 200 | nestedObject: { 201 | subArray: [...] // Also paginated if needed 202 | } 203 | }, 204 | metadata: { // Only present if pagination occurred 205 | totalItems: 100, 206 | itemsPerPage: 10, 207 | currentPage: 1, 208 | totalPages: 10, 209 | hasNextPage: true, 210 | pageToken: 'base64token', 211 | arrayField: 'arrayField' // Indicates which field was paginated 212 | } 213 | }, null, 2) 214 | }] 215 | } 216 | ``` 217 | 218 | 3. **Pagination Control** 219 | ```typescript 220 | // Environment configuration 221 | env.items_per_page = 10; // Default page size 222 | 223 | // Automatic pagination triggers when: 224 | // - Arrays have more items than items_per_page 225 | // - Objects have more keys than items_per_page 226 | ``` 227 | 228 | ### Best Practices 229 | 230 | 1. **Return Raw Data** 231 | ```typescript 232 | // Good: Let ResponseProcessor handle wrapping 233 | return accountInfo; 234 | 235 | // Bad: Manual wrapping 236 | return { 237 | content: [{ 238 | type: 'text', 239 | text: JSON.stringify(accountInfo) 240 | }] 241 | }; 242 | ``` 243 | 244 | 2. **Handle Page Tokens** 245 | ```typescript 246 | export const yourTool = async (args: { pageToken?: string }) => { 247 | // Get data 248 | const data = await getData(); 249 | 250 | // Let ResponseProcessor handle pagination 251 | return data; 252 | }; 253 | ``` 254 | 255 | 3. **Preserve Data Structure** 256 | ```typescript 257 | // ResponseProcessor maintains structure while paginating 258 | const response = { 259 | summary: "Account info", 260 | details: { 261 | assets: [...], // Will be paginated if needed 262 | apps: [...] // Will be paginated if needed 263 | } 264 | }; 265 | ``` 266 | 267 | ### Error Handling 268 | ```typescript 269 | try { 270 | const data = await getData(); 271 | return data; // ResponseProcessor will handle wrapping 272 | } catch (error) { 273 | throw new McpError( 274 | ErrorCode.InternalError, 275 | `Operation failed: ${error.message}` 276 | ); 277 | } 278 | ``` 279 | 280 | ## Response Handling 281 | 282 | ### Direct Response Pattern 283 | Tools should return their data directly. The MCP server framework handles: 284 | 1. Response wrapping 285 | 2. Pagination for large datasets 286 | 3. Metadata generation 287 | 288 | Example of server-handled pagination: 289 | ```json 290 | { 291 | "data": { 292 | "address": "...", 293 | "assets": [...] 294 | }, 295 | "metadata": { 296 | "totalItems": 355, 297 | "itemsPerPage": 10, 298 | "currentPage": 1, 299 | "totalPages": 36, 300 | "hasNextPage": true, 301 | "pageToken": "cGFnZV8y", 302 | "arrayField": "assets" 303 | } 304 | } 305 | ``` 306 | 307 | ### Pagination Support 308 | - The MCP server automatically handles pagination for large arrays 309 | - Tools can accept pageToken parameter for subsequent pages 310 | - No need to manually implement pagination logic 311 | 312 | ## Current Example Implementation 313 | 314 | The example tool demonstrates these concepts: 315 | 316 | ```typescript 317 | // packages/server/src/tools/apiManager/example/get-balance.ts 318 | 319 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; 320 | import { algodClient } from '../../../algorand-client.js'; 321 | 322 | export const getBalanceToolSchema: { type: "object", properties: any, required: string[] } = { 323 | type: "object", 324 | properties: { 325 | address: { 326 | type: 'string', 327 | description: 'Algorand address in standard format (58 characters)' 328 | } 329 | }, 330 | required: ['address'] 331 | }; 332 | 333 | export const getBalanceTool = async (args: { address: string }) => { 334 | try { 335 | // Input validation 336 | if (!args.address) { 337 | throw new McpError( 338 | ErrorCode.InvalidParams, 339 | 'Missing required parameter: address' 340 | ); 341 | } 342 | 343 | if (!/^[A-Z2-7]{58}$/.test(args.address)) { 344 | throw new McpError( 345 | ErrorCode.InvalidParams, 346 | 'Invalid Algorand address format' 347 | ); 348 | } 349 | 350 | // Get account information using Algorand client 351 | const accountInfo = await algodClient.accountInformation(args.address).do(); 352 | 353 | // Return account info directly - MCP server handles pagination 354 | return accountInfo; 355 | } catch (error: unknown) { 356 | // Handle specific Algorand API errors 357 | if (error instanceof McpError) { 358 | throw error; 359 | } 360 | 361 | // Format error response 362 | const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; 363 | throw new McpError( 364 | ErrorCode.InternalError, 365 | `Failed to get account balance: ${errorMessage}` 366 | ); 367 | } 368 | }; 369 | ``` 370 | 371 | Key features demonstrated: 372 | 1. Proper import paths with .js extensions 373 | 2. TypeScript type definitions 374 | 3. Input validation 375 | 4. Direct response pattern 376 | 5. Error handling 377 | 6. Integration with Algorand client 378 | 7. Automatic pagination support 379 | 380 | ## Testing Requirements 381 | 382 | 1. Create test files mirroring your tool structure: 383 | 384 | ```typescript 385 | // packages/server/tests/tools/apiManager/your-provider/feature.test.ts 386 | 387 | describe('Your Provider Feature Tool', () => { 388 | it('should handle valid input correctly', async () => { 389 | // Test implementation 390 | }); 391 | 392 | it('should handle invalid input appropriately', async () => { 393 | // Test error cases 394 | }); 395 | 396 | // Add more test cases 397 | }); 398 | ``` 399 | 400 | 401 | 402 | ## Documentation Standards 403 | 404 | 1. **JSDoc Comments** 405 | ```typescript 406 | /** 407 | * Description of what the tool does 408 | * @param {Object} args - Tool arguments 409 | * @param {string} args.param1 - Description of parameter 410 | * @returns {Promise<Object>} Description of return value 411 | * @throws {McpError} Description of possible errors 412 | */ 413 | ``` 414 | 415 | 2. **Usage Examples** 416 | ```typescript 417 | // Include example usage in comments 418 | /* 419 | Example usage: 420 | { 421 | "param1": "example-value", 422 | "param2": 123 423 | } 424 | 425 | Example response: 426 | { 427 | "data": { 428 | // Tool-specific data 429 | }, 430 | "metadata": { 431 | // Pagination metadata if applicable 432 | } 433 | } 434 | */ 435 | ``` 436 | 437 | 3. **Error Documentation** 438 | - Document all possible error cases 439 | - Include error codes and messages 440 | - Provide troubleshooting guidance 441 | 442 | ## Best Practices 443 | 444 | 1. **Input Validation** 445 | - Validate all input parameters 446 | - Use type guards for runtime checks 447 | - Provide clear error messages 448 | 449 | 2. **Response Handling** 450 | - Return raw data directly 451 | - Let MCP server handle response wrapping 452 | - Let MCP server handle pagination 453 | 454 | 3. **Performance** 455 | - Implement caching where appropriate 456 | - Handle rate limits 457 | - Optimize network requests 458 | 459 | 4. **Security** 460 | - Validate all inputs 461 | - Sanitize sensitive data 462 | - Handle credentials securely 463 | 464 | ## Review Process 465 | 466 | 1. **Code Review Checklist** 467 | - Follows project structure 468 | - Implements proper error handling 469 | - Includes comprehensive tests 470 | - Provides clear documentation 471 | - Follows naming conventions 472 | - Handles edge cases 473 | 474 | 2. **Testing Requirements** 475 | - All tests pass 476 | - Adequate test coverage 477 | - Integration tests included 478 | - Performance tests if applicable 479 | 480 | 3. **Documentation Requirements** 481 | - JSDoc comments complete 482 | - Usage examples provided 483 | - Error cases documented 484 | - README updates if needed 485 | 486 | ## Getting Help 487 | 488 | - Review existing implementations in `packages/server/src/tools/apiManager/` 489 | - Check test files for examples 490 | - Consult project maintainers 491 | - Reference API specifications in `packages/server/API specs/` 492 | 493 | Remember to follow the established patterns and maintain consistency with the existing codebase. 494 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:crypto:merkle_tree.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:amm.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:auction.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:htlc_logicsig.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:marketplace.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:events:arc28_events.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:governance:simple_voting.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:nft:proof_of_attendance.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:privacy:zk_whitelist.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:transactions.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:utility:calculator.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md: -------------------------------------------------------------------------------- ```markdown 1 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md: -------------------------------------------------------------------------------- ```markdown 1 | # TITLE 2 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/tealscript:tests_test_package_README.md: -------------------------------------------------------------------------------- ```markdown 1 | This is a simple package that is used to test importing things from npm packages. 2 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/tealscript:examples_itxns_README.md: -------------------------------------------------------------------------------- ```markdown 1 | To compile `itxns.ts`, generate the algokit client, and run `demo.ts` run `yarn itxns` ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/tealscript:examples_reti_README.md: -------------------------------------------------------------------------------- ```markdown 1 | Reti contracts from https://github.com/TxnLab/reti/tree/2567018024ab8c2b3c59142e26cb55ce78bd2414 2 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_amount_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/amount.spec 2 | 3 | # Module: types/amount.spec 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md: -------------------------------------------------------------------------------- ```markdown 1 | # POST Assertion Request 2 | 3 | This endpoint is used to request assertion options from the FIDO2 service. 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md: -------------------------------------------------------------------------------- ```markdown 1 | # POST Assertion Response 2 | 3 | This endpoint is used to request assertion options from the FIDO2 service. 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_app_client_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/app-client.spec 2 | 3 | # Module: types/app-client.spec 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_client_manager_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/client-manager.spec 2 | 3 | # Module: types/client-manager.spec 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:writing-contracts:python.md: -------------------------------------------------------------------------------- ```markdown 1 | title: Python 2 | 3 | Follow [this](https://algorandfoundation.github.io/puya/) link for the Algorand Python GitHub docs. 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_account_manager_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/account-manager.spec 2 | 3 | # Module: types/account-manager.spec 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/algorand-client.spec 2 | 3 | # Module: types/algorand-client.spec 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_dispenser_client_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/dispenser-client.spec 2 | 3 | # Module: types/dispenser-client.spec 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/async-event-emitter.spec 2 | 3 | # Module: types/async-event-emitter.spec 4 | ``` -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md: -------------------------------------------------------------------------------- ```markdown 1 | [@algorandfoundation/algokit-utils](../README.md) / types/algorand-client.asset.spec 2 | 3 | # Module: types/algorand-client.asset.spec 4 | ```