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 |
```