#
tokens: 49977/50000 99/942 files (page 1/74)
lines: off (toggle) GitHub
raw markdown copy
This is page 1 of 74. Use http://codebase.md/goplausible/algorand-mcp?lines=false&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:
--------------------------------------------------------------------------------

```
ALGORAND_NETWORK=testnet
ALGORAND_ALGOD_API=https://testnet-api.algonode.cloud/v2
ALGORAND_ALGOD=https://testnet-api.algonode.cloud
ALGORAND_INDEXER_API=https://testnet-idx.algonode.cloud/v2
ALGORAND_INDEXER=https://testnet-idx.algonode.cloud
ALGORAND_ALGOD_PORT=
ALGORAND_INDEXER_PORT=
ALGORAND_TOKEN=
GOPLAUSIBLE_ACCOUNT=
ALGORAND_AGENT_WALLET=
```

--------------------------------------------------------------------------------
/packages/server/.env.example:
--------------------------------------------------------------------------------

```
# Algorand Network Configuration
ALGORAND_NETWORK=testnet
ALGORAND_ALGOD_API=https://testnet-api.algonode.cloud/v2
ALGORAND_ALGOD=https://testnet-api.algonode.cloud
ALGORAND_INDEXER_API=https://testnet-idx.algonode.cloud/v2
ALGORAND_INDEXER=https://testnet-idx.algonode.cloud
ALGORAND_ALGOD_PORT=
ALGORAND_INDEXER_PORT=
ALGORAND_TOKEN=
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
# NFDomains API Configuration
NFD_API_URL=https://api.nf.domains
NFD_API_KEY=

# Tinyman API Configuration
TINYMAN_ACTIVE=false

# Ultrade API Configuration
ULTRADE_ACTIVE=true
# Vestige API Configuration
VESTIGE_ACTIVE=false
VESTIGE_API_URL=https://api.vestigelabs.org
VESTIGE_API_KEY=

# Number of items per page for paginated responses (default: 5)
ITEMS_PER_PAGE=10

```

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
.env
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
test-mcp-server
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
packages/client-sse/*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
server-sse-agent
server-sse-agent/*
server-sse
server-sse/*
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp
.cache

# Docusaurus cache and generated files
.docusaurus

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
package-lock.json
sse-server
memory*
*rules
a2*
packages/server/src/resources/.DS_Store
packages/server/src/resources/.DS_Store
packages/server/src/resources/knowledge/.DS_Store
packages/server/src/resources/.DS_Store
packages/server/src/resources/.DS_Store
packages/.DS_Store
.DS_Store
.vscode/settings.json

```

--------------------------------------------------------------------------------
/packages/client/README.md:
--------------------------------------------------------------------------------

```markdown
# Algorand MCP Client

## Overview
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.

## Requirements
- Node.js v23.6.1 or later
- npm v10.2.4 or later

## Features
- Comprehensive wallet connectivity
- Local wallet with secure storage
- Support for popular external wallets:
  - Pera Wallet
  - Defly Wallet
  - Daffi Wallet
- Secure credential management
- Transaction signing and session management
- TypeScript support with full type definitions

## Installation

To install or update the Algorand MCP implementation, clone the repository, install the dependencies and build the project":

First check node version to be 23.6.1 or later:
```bash
node -v
```

Upgrade to 23.6.1 or later if needed!

Then check the Claude or Cursor container folders to have mcp-servers folder (if not create one):
```bash
mkdir PATH_ON_YOUR_MACHINE/Claude/mcp-servers
# or for Cursor 
mkdir PATH_ON_YOUR_MACHINE/Cursor/mcp-servers
```
Then clone this repository under mcp-servers folder and install dependencies:

```bash
cd PATH_ON_YOUR_MACHINE/Claude/mcp-servers
# or for Cursor 
cd PATH_ON_YOUR_MACHINE/Cursor/mcp-servers
# Clone the repository
git clone https://github.com/GoPlausible/algorand-mcp.git
cd algorand-mcp
# Install dependencies
npm install
# Build the project
npm run build
```
And you are done! Now you can open you MCP config and add the server as :

```json
{
  "mcpServers": {
    "algorand-mcp": {
      "command": "node",
      "args": [
        "PATH_ON_YOUR_MACHINE/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js"
     ],
      "env": {
        "ALGORAND_NETWORK": "testnet",
        "ALGORAND_ALGOD_API": "https://testnet-api.algonode.cloud/v2",
        "ALGORAND_ALGOD": "https://testnet-api.algonode.cloud",
        "ALGORAND_INDEXER_API": "https://testnet-idx.algonode.cloud/v2",
        "ALGORAND_INDEXER": "https://testnet-idx.algonode.cloud",
        "ALGORAND_ALGOD_PORT": "",
        "ALGORAND_INDEXER_PORT": "",
        "ALGORAND_TOKEN": "",
        "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",
        "NFD_API_URL": "https://api.nf.domains",
        "NFD_API_KEY": "",
        "TINYMAN_ACTIVE": "false",
        "ULTRADE_ACTIVE": "false",
        "ULTRADE_API_URL": "https://api.ultrade.io",
        "VESTIGE_ACTIVE": "false",
        "VESTIGE_API_URL": "https://api.vestigelabs.org",
        "VESTIGE_API_KEY": "",
        "ITEMS_PER_PAGE": "10"

      }
    }
  }
}
```
Make sure yopu change the paths to match your local system's paths.

For example on MACOS and Claud, the path would be something like this:

```json
{
  "mcpServers": {
    "algorand-mcp": {
      "command": "node",
      "args": [
        " /Users/YOUR_USERNAME/Library/Application\ Support/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js"
     ]
    }
  }
}
```


## Project Structure

```
src/
├── index.ts        # Main client implementation and wallet management
├── LocalWallet.ts  # Local wallet implementation
└── env.ts         # Environment configuration
```

## Installation

```bash
npm install @algorand-mcp/client
```

## Features

### Universal ES Module Support
- Works in both browser and Node.js environments
- No environment-specific dependencies
- Dynamic imports for Node.js modules
- Browser-compatible credential storage

### Wallet Support

#### Local Wallet
The Local Wallet provides a secure, environment-aware wallet implementation:

**Browser Environment:**
- Uses the Web Credentials API for secure mnemonic storage
- Encrypted storage of sensitive data
- Persistent across sessions
- No external dependencies

**Node.js Environment:**
- File-based mnemonic storage
- Encrypted .mnemonic files
- Project directory storage
- Secure file permissions

**Methods:**
- `connect()`: Creates new account if none exists
- `reconnectSession()`: Reconnects to existing account
- `disconnect()`: Clears current session
- `signTransactions()`: Signs transaction groups
- `makeTransactionSigner()`: Creates algosdk-compatible signer

#### External Wallets
Support for popular Algorand wallets:

1. **Pera Wallet**
   - Most widely used Algorand wallet
   - Mobile and browser support
   - QR code connectivity

2. **Defly Wallet**
   - Advanced features
   - DeFi focused
   - Built-in analytics

3. **Daffi Wallet**
   - User-friendly interface
   - Beginner focused
   - Simple transaction flow

**Common Methods:**
- `connect()`: Initiates wallet connection
- `reconnectSession()`: Restores previous session
- `disconnect()`: Ends wallet session
- `signTransactions()`: Signs transaction groups

## Usage

### Basic Setup

```typescript
import { AlgorandMcpClient } from '@algorand-mcp/client';

// Initialize client
const client = new AlgorandMcpClient({
  network: 'testnet'  // 'mainnet' or 'localnet'
});
```

### Local Wallet

```typescript
// Connect to local wallet (creates new if none exists)
const [address] = await client.connect('local');
console.log('Connected address:', address);

// Sign transactions
const signedTxns = await client.signTransactions([[
  { txn: someTransaction, message: 'Optional message' }
]]);

// Get algosdk-compatible signer
const signer = await client.makeTransactionSigner();
const signedTxn = await signer([transaction], [0]);

// Disconnect
await client.disconnect();
```

### External Wallets

```typescript
// Connect to Pera Wallet
const addresses = await client.connect('pera');
console.log('Connected addresses:', addresses);

// Sign transaction group
const signedTxns = await client.signTransactions([
  [{ txn: tx1 }, { txn: tx2 }]  // Transaction group
]);

// Disconnect
await client.disconnect();
```

### Session Management

```typescript
// Save session for later
const addresses = await client.connect('pera');
// ... Later, in a new session:
const reconnected = await client.reconnectSession('pera');
if (reconnected) {
  console.log('Session restored');
}
```

## Advanced Usage

### Multiple Wallet Support

```typescript
// Switch between wallets
await client.connect('pera');
// ... do something with Pera
await client.disconnect();

await client.connect('local');
// ... do something with local wallet
await client.disconnect();
```

### Transaction Signing with Messages

```typescript
const signedTxns = await client.signTransactions([[
  {
    txn: paymentTxn,
    message: 'Send 1 ALGO to Bob'
  },
  {
    txn: assetTxn,
    message: 'Opt into ASA'
  }
]]);
```

### Error Handling

```typescript
try {
  await client.connect('pera');
} catch (error) {
  if (error.code === 'user-rejected') {
    console.log('User rejected connection');
  } else if (error.code === 'wallet-not-found') {
    console.log('Wallet not installed');
  } else {
    console.error('Unknown error:', error);
  }
}
```

## Environment Variables

```bash
# Optional - defaults to testnet
ALGORAND_NETWORK="mainnet"

# Optional - for custom node URLs
ALGOD_SERVER="http://localhost:4001"
ALGOD_TOKEN="your_token"
ALGOD_PORT="4001"
```

## Security Considerations

### Local Wallet
- Mnemonics are always encrypted before storage
- Secure credential management
- Memory is cleared after use

### External Wallets
- No sensitive data is stored by the client
- All signing happens in the wallet
- Session data is encrypted

## Best Practices

1. **Always handle disconnects:**
   ```typescript
   window.addEventListener('beforeunload', () => {
     client.disconnect();
   });
   ```

2. **Provide clear transaction messages:**
   ```typescript
   await client.signTransactions([[{
     txn: transaction,
     message: 'Clear description of what this does'
   }]]);
   ```

3. **Check network before connecting:**
   ```typescript
   if (client.network !== 'mainnet') {
     console.warn('Not connected to mainnet!');
   }
   ```

4. **Implement proper error handling:**
   ```typescript
   try {
     await client.connect('pera');
   } catch (error) {
     handleError(error);
   }
   ```

5. **Clean up resources:**
   ```typescript
   async function cleanup() {
     await client.disconnect();
     // other cleanup
   }
   ```

## Troubleshooting

Common issues and solutions:

1. **Wallet not connecting**
   - Check if wallet is installed
   - Verify network matches wallet
   - Clear browser cache if needed

2. **Transaction signing fails**
   - Verify account has sufficient balance
   - Check transaction parameters
   - Ensure wallet is still connected

3. **Session not restoring**
   - Clear stored session data
   - Reconnect from scratch
   - Check for wallet updates

## License

MIT

```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
# Algorand MCP Implementation
<!-- [![smithery badge](https://smithery.ai/badge/@GoPlausible/algorand-mcp)](https://smithery.ai/server/@GoPlausible/algorand-mcp) -->
[![npm downloads](https://img.shields.io/npm/dm/algorand-mcp.svg)](https://www.npmjs.com/package/algorand-mcp)
[![npm version](https://badge.fury.io/js/algorand-mcp.svg)](https://badge.fury.io/js/algorand-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Overview

[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.

![Screenshot 2025-03-15 at 17 47 54](https://github.com/user-attachments/assets/db561f9f-5f95-4b07-914b-a71f48bb5399)

[MCP Github](https://github.com/modelcontextprotocol) contains more information and different tools and specifications plus documentation of MCP.

This repository is a Model Context Protocol (MCP) implementation for Algorand blockchain interactions. The implementation consists of:
- (PRODUCTION) A server package for blockchain interactions (Node.js only)
- (WIP) A client package for wallet management and transaction signing (supports both browser and Node.js)

**📦 Packages in this repository:**
- **[Algorand MCP Server](packages/server/README.md)** - Algorand MCP server full implementation.
- **[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.

**📦 NPM:**
- **[Algorand MCP Server NPM package](https://www.npmjs.com/package/algorand-mcp)** - Algorand MCP server implementation via NPM package installation.

<!-- **📦 Smithery:**
- **[Algorand MCP Server on Smithery](https://smithery.ai/server/@GoPlausible/algorand-mcp)** - Algorand MCP server implementation via smithery. -->


## Features
- **Complete Algorand Documentation Integration**
  - **Full Algorand knowledge taxonomy**
  - **Comprehensive developer documentation**
  - **ARCs, SDKs, and tools documentation**
  - **Direct document access via knowledge tool**
- Complete Algorand blockchain interaction capabilities
- Extensive wallet management system
- Comprehensive transaction handling
- Rich blockchain state querying
- Built-in security features
- Support for Claude Desktop and Cursor integration

## Requirements
- Node.js v23.6.1 or later
- npm v10.2.4 or later

## Installation

To install or update the Algorand MCP implementation, clone the repository, install the dependencies and build the project":

First check node version to be 23.6.1 or later:
```bash
node -v
```

Upgrade to 23.6.1 or later if needed!

Then check the Claude or Cursor container folders to have mcp-servers folder (if not create one):
```bash
mkdir PATH_ON_YOUR_MACHINE/Claude/mcp-servers
# or for Cursor 
mkdir PATH_ON_YOUR_MACHINE/Cursor/mcp-servers
```
Then clone this repository under mcp-servers folder and install dependencies:

```bash
cd PATH_ON_YOUR_MACHINE/Claude/mcp-servers
# or for Cursor 
cd PATH_ON_YOUR_MACHINE/Cursor/mcp-servers
# Clone the repository
git clone https://github.com/GoPlausible/algorand-mcp.git
cd algorand-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Edit the .env file to set your configurations
```
And you are done! Now you can open you MCP config and add the server as :

```json
{
  "mcpServers": {
    "algorand-mcp": {
      "command": "node",
      "args": [
        "PATH_ON_YOUR_MACHINE/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js"
     ],
      "env": {
        "ALGORAND_NETWORK": "testnet",
        "ALGORAND_ALGOD_API": "https://testnet-api.algonode.cloud/v2",
        "ALGORAND_ALGOD": "https://testnet-api.algonode.cloud",
        "ALGORAND_INDEXER_API": "https://testnet-idx.algonode.cloud/v2",
        "ALGORAND_INDEXER": "https://testnet-idx.algonode.cloud",
        "ALGORAND_ALGOD_PORT": "",
        "ALGORAND_INDEXER_PORT": "",
        "ALGORAND_TOKEN": "",
        "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",
        "NFD_API_URL": "https://api.nf.domains",
        "NFD_API_KEY": "",
        "TINYMAN_ACTIVE": "false",
        "ULTRADE_ACTIVE": "false",
        "VESTIGE_ACTIVE": "false",
        "ULTRADE_API_URL": "https://api.ultrade.io",
        "VESTIGE_API_URL": "https://api.vestigelabs.org",
        "VESTIGE_API_KEY": "",
        "ITEMS_PER_PAGE": "10"

      }
    }
  }
}
```
Make sure yopu change the paths to match your local system's paths.

For example on MACOS and Claud, the path would be something like this:

```json
{
  "mcpServers": {
    "algorand-mcp": {
      "command": "node",
      "args": [
        " /Users/YOUR_USERNAME/Library/Application\ Support/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js"
     ]
    }
  }
}
```

## Project Architecture

The project follows a modular architecture with two main packages:

1. **Server Package (`@algorand-mcp/server`)**
   - Provides MCP tools and resources
   - Manages blockchain interactions
   - Handles transaction creation and submission
   - Offers comprehensive blockchain queries

2. **Client Package (`@algorand-mcp/client`)**
   - Handles wallet connections and transaction signing
   - Supports both local and external wallets
   - Universal compatibility (browser/Node.js)
   - Secure credential management
   - Still work in progress (Server works irrelevant to client status)

## Project Structure

```
algorand-mcp/
├── packages/
│   ├── client/                    # Client Package
│   │   ├── src/
│   │   │   ├── index.ts          # Client entry point and wallet management
│   │   │   └── LocalWallet.ts    # Local wallet implementation
│   │   ├── package.json
│   │   └── tsconfig.json
│   └── server/                    # Server Package
│       ├── src/
│       │   ├── resources/         # MCP Resources (User-invokable endpoints)
│       │   │   ├── knowledge/     # Documentation and taxonomy
│       │   │   │   ├── taxonomy/  # Markdown documentation
│       │   │   │   └── index.ts   # Knowledge resource handler
│       │   │   ├── wallet/       # Wallet management
│       │   │   │   └── index.ts   # Wallet resource handler
│       │   │   └── index.ts       # Resource registration
│       │   ├── tools/            # MCP Tools (Agent-invokable operations)
│       │   │   ├── accountManager.ts     # Account operations
│       │   │   ├── algodManager.ts       # Node interactions
│       │   │   ├── utilityManager.ts     # Utility functions
│       │   │   ├── apiManager/       # API Tools
│       │   │   │   ├── algod/           # Algod API tools
│       │   │   │   ├── indexer/         # Indexer API tools
│       │   │   │   ├── nfd/            # NFDomains tools
│       │   │   │   ├── vestige/        # Vestige DeFi tools
│       │   │   │   ├── tinyman/        # Tinyman AMM tools
│       │   │   │   └── ultrade/        # Ultrade DEX tools
│       │   │   └── transactionManager/   # Transaction handling
│       │   ├── env.ts            # Environment configuration
│       │   └── index.ts          # Server entry point
│       ├── package.json
│       └── tsconfig.json
├── package.json                   # Root package file
└── tsconfig.json                 # Root TypeScript config
```

## Core Functionalities

### Server Features
- Account management
- Asset operations
- Application interactions
- Transaction creation and submission
- Blockchain state queries
- Comprehensive utility functions
- Standardized response format
- Built-in pagination support
- NFDomains integration
- Vestige DeFi analytics (optional, disabled by default)
- Tinyman AMM integration (optional, disabled by default)
- Ultrade DEX integration (optional, disabled by default)
- Knowledge taxonomy resources:
  - Full documentation taxonomy (algorand://knowledge/taxonomy)
  - Category-specific documentation:
    - ARCs (algorand://knowledge/taxonomy/arcs)
    - SDKs (algorand://knowledge/taxonomy/sdks)
    - AlgoKit (algorand://knowledge/taxonomy/algokit)
    - AlgoKit Utils (algorand://knowledge/taxonomy/algokit-utils)
    - TEALScript (algorand://knowledge/taxonomy/tealscript)
    - Puya (algorand://knowledge/taxonomy/puya)
    - Liquid Auth (algorand://knowledge/taxonomy/liquid-auth)
    - Python (algorand://knowledge/taxonomy/python)
    - Developer Docs (algorand://knowledge/taxonomy/developers)
    - CLI Tools (algorand://knowledge/taxonomy/clis)
    - Node Management (algorand://knowledge/taxonomy/nodes)
    - Technical Details (algorand://knowledge/taxonomy/details)

### Client Features (Work in Progress)
- Local wallet with secure storage
- External wallet support (Pera, Defly, Daffi)
- Transaction signing
- Session management
- Universal ES module support

## Response Format

All responses follow a standardized format:

```typescript
{
  "data": {
    // Response data here
  },
  "metadata": {  // Only for paginated responses
    "totalItems": number,
    "itemsPerPage": number,
    "currentPage": number,
    "totalPages": number,
    "hasNextPage": boolean,
    "pageToken": string,
    "arrayField": string  // Name of paginated array field
  }
}
```

Errors are returned in a standardized format:
```typescript
{
  "error": {
    "code": string,
    "message": string
  }
}
```

## Available Tools and Resources

The Algorand MCP implementation provides 125 tools and resources for blockchain interaction:
- 40 base tools (account, asset, application, transaction management)
- 30 API tools (algod and indexer)
- 6 NFDomains (NFD) tools for name services
- 28 Vestige tools for DeFi analytics
- 9 Tinyman tools for AMM interactions
- 12 Ultrade tools for DEX functionality

### API Tools

#### Algod API Tools
- api_algod_get_account_info: Get current account balance, assets, and auth address
- api_algod_get_account_application_info: Get account-specific application information
- api_algod_get_account_asset_info: Get account-specific asset information
- api_algod_get_application_by_id: Get application information
- api_algod_get_application_box: Get application box by name
- api_algod_get_application_boxes: Get all application boxes
- api_algod_get_asset_by_id: Get current asset information
- api_algod_get_pending_transaction: Get pending transaction information
- api_algod_get_pending_transactions_by_address: Get pending transactions for an address
- api_algod_get_pending_transactions: Get all pending transactions
- api_algod_get_transaction_params: Get suggested transaction parameters
- api_algod_get_node_status: Get current node status
- api_algod_get_node_status_after_block: Get node status after a specific round

#### Indexer API Tools
- api_indexer_lookup_account_by_id: Get account information
- api_indexer_lookup_account_assets: Get account assets
- api_indexer_lookup_account_app_local_states: Get account application local states
- api_indexer_lookup_account_created_applications: Get applications created by account
- api_indexer_search_for_accounts: Search for accounts with various criteria
- api_indexer_lookup_applications: Get application information
- api_indexer_lookup_application_logs: Get application log messages
- api_indexer_search_for_applications: Search for applications
- api_indexer_lookup_asset_by_id: Get asset information and configuration
- api_indexer_lookup_asset_balances: Get accounts holding this asset
- api_indexer_lookup_asset_transactions: Get transactions involving this asset
- api_indexer_search_for_assets: Search for assets
- api_indexer_lookup_transaction_by_id: Get transaction information
- api_indexer_lookup_account_transactions: Get account transaction history
- api_indexer_search_for_transactions: Search for transactions

#### NFDomains (NFD) API Tools
- api_nfd_get_nfd: Get NFD by name or application ID
- api_nfd_get_nfds_for_addresses: Get NFDs for specific addresses
- api_nfd_get_nfd_activity: Get activity/changes for NFDs
- api_nfd_get_nfd_analytics: Get analytics data for NFDs
- api_nfd_browse_nfds: Browse NFDs with various filters
- api_nfd_search_nfds: Search NFDs with various filters

#### Vestige API Tools

1. View Tools:
- api_vestige_view_networks: Get all networks
- api_vestige_view_network_by_id: Get network by id
- api_vestige_view_protocols: Get all protocols
- api_vestige_view_protocol_by_id: Get protocol by id
- api_vestige_view_protocol_volumes: Get protocol volumes at specific day
- api_vestige_view_assets: Get data about assets
- api_vestige_view_assets_list: Get asset list
- api_vestige_view_assets_search: Search assets by query
- api_vestige_view_asset_price: Get asset prices
- api_vestige_view_asset_candles: Get asset candles
- api_vestige_view_asset_history: Get asset volume, swaps, total lockup, vwap and confidence history
- api_vestige_view_asset_composition: Get asset lockups based on protocol and pair
- api_vestige_view_pools: Get pools
- api_vestige_view_vaults: Get all vaults
- api_vestige_view_balances: Get balances by network id, protocol id and asset id
- api_vestige_view_notes: Get notes by network id and optionally asset id
- api_vestige_view_first_asset_notes: Get first note for assets
- api_vestige_view_asset_notes_count: Get notes count for assets
- api_vestige_view_swaps: Get swaps

2. Swap Tools:
- api_vestige_get_best_v4_swap_data: Get best V4 swap data
- api_vestige_get_v4_swap_discount: Get V4 swap discount
- api_vestige_get_v4_swap_data_transactions: Get V4 swap data transactions
- api_vestige_get_aggregator_stats: Get aggregator stats

3. Currency Tools:
- api_vestige_view_currency_prices: Get all latest currency prices
- api_vestige_view_currency_price_history: Get currency prices by timestamp range
- api_vestige_view_currency_price: Get currency price by timestamp
- api_vestige_view_currency_average_price: Get average price for currency
- api_vestige_view_currency_prices_simple_30d: Get currency prices for last 30 days

#### Tinyman API Tools
- api_tinyman_get_pool: Get Tinyman pool information by asset pair
- api_tinyman_get_pool_analytics: Get analytics for a Tinyman pool
- api_tinyman_get_pool_creation_quote: Get quote for creating a new pool
- api_tinyman_get_liquidity_quote: Get quote for adding liquidity
- api_tinyman_get_remove_liquidity_quote: Get quote for removing liquidity
- api_tinyman_get_swap_quote: Get quote for swapping assets
- api_tinyman_get_asset_optin_quote: Get quote for opting into pool token
- api_tinyman_get_validator_optin_quote: Get quote for opting into validator
- api_tinyman_get_validator_optout_quote: Get quote for opting out of validator

#### Ultrade API Tools
1. Wallet Tools:
- api_ultrade_wallet_signin_message: Generate message from the sign in data
- api_ultrade_wallet_signin: Sign in to trading account
- api_ultrade_wallet_add_key: Add a trading key
- api_ultrade_wallet_revoke_key: Revoke a trading key
- api_ultrade_wallet_keys: Get trading keys
- api_ultrade_wallet_key_message: Generate message from the trading key data
- api_ultrade_wallet_trades: Get filtered wallet trades
- api_ultrade_wallet_transactions: Get filtered wallet transactions
- api_ultrade_wallet_withdraw: Withdraw token
- api_ultrade_wallet_withdraw_message: Generate message from the withdrawal data

2. Market Tools:
- api_ultrade_market_symbols: Get market symbols
- api_ultrade_market_details: Get market details
- api_ultrade_market_price: Get last market price by pair symbol
- api_ultrade_market_depth: Get order book depth
- api_ultrade_market_last_trades: Get last trades
- api_ultrade_market_history: Get market history
- api_ultrade_market_assets: Get trading assets
- api_ultrade_market_fee_rates: Get fee rates
- api_ultrade_market_chains: Get blockchain chains
- api_ultrade_market_withdrawal_fee: Get withdrawal fee
- api_ultrade_market_operation_details: Get operation details
- api_ultrade_market_settings: Get market settings
- api_ultrade_market_orders: Get orders
- api_ultrade_market_open_orders: Get open orders
- api_ultrade_market_order_by_id: Get order by ID
- api_ultrade_market_order_message: Generate message from the order data
- api_ultrade_market_create_order: Create new order
- api_ultrade_market_create_orders: Create new orders
- api_ultrade_market_cancel_order: Cancel open order
- api_ultrade_market_cancel_orders: Cancel multiple open orders

3. System Tools:
- api_ultrade_system_time: Get current system time
- api_ultrade_system_maintenance: Get system maintenance status
- api_ultrade_system_version: Get system version

### Account Management Tools
- create_account: Create a new Algorand account
- rekey_account: Rekey an account to a new address
- validate_address: Check if an Algorand address is valid
- encode_address: Encode a public key to an Algorand address
- decode_address: Decode an Algorand address to a public key

### Application Tools
- make_app_create_txn: Create an application creation transaction
- make_app_update_txn: Create an application update transaction
- make_app_delete_txn: Create an application delete transaction
- make_app_optin_txn: Create an application opt-in transaction
- make_app_closeout_txn: Create an application close-out transaction
- make_app_clear_txn: Create an application clear state transaction
- make_app_call_txn: Create an application call transaction
- get_application_address: Get the address for a given application ID
- compile_teal: Compile TEAL source code
- disassemble_teal: Disassemble TEAL bytecode back to source

### Asset Tools
- make_asset_create_txn: Create an asset creation transaction
- make_asset_config_txn: Create an asset configuration transaction
- make_asset_destroy_txn: Create an asset destroy transaction
- make_asset_freeze_txn: Create an asset freeze transaction
- make_asset_transfer_txn: Create an asset transfer transaction

### Transaction Tools
- send_raw_transaction: Submit signed transactions to the network
- simulate_raw_transactions: Simulate raw transactions
- simulate_transactions: Simulate transactions with detailed configuration
- make_payment_txn: Create a payment transaction
- assign_group_id: Assign a group ID to a list of transactions
- sign_transaction: Sign a transaction with a secret key

### Key Management Tools
- mnemonic_to_mdk: Convert a mnemonic to a master derivation key
- mdk_to_mnemonic: Convert a master derivation key to a mnemonic
- secret_key_to_mnemonic: Convert a secret key to a mnemonic
- mnemonic_to_secret_key: Convert a mnemonic to a secret key
- seed_from_mnemonic: Generate a seed from a mnemonic
- mnemonic_from_seed: Generate a mnemonic from a seed
- sign_bytes: Sign arbitrary bytes with a secret key

### Utility Tools
- bytes_to_bigint: Convert bytes to a BigInt
- bigint_to_bytes: Convert a BigInt to bytes
- encode_uint64: Encode a uint64 to bytes
- decode_uint64: Decode bytes to a uint64
- generate_algorand_uri: Generate an Algorand URI and QR code according to ARC-26 specification

## Dependencies

- algosdk: Algorand JavaScript SDK
- @perawallet/connect: Pera Wallet connector
- @blockshake/defly-connect: Defly Wallet connector
- @daffiwallet/connect: Daffi Wallet connector

## License

MIT

```

--------------------------------------------------------------------------------
/packages/server/README.md:
--------------------------------------------------------------------------------

```markdown
[![smithery badge](https://smithery.ai/badge/@GoPlausible/algorand-mcp)](https://smithery.ai/server/@GoPlausible/algorand-mcp)
[![npm version](https://badge.fury.io/js/algorand-mcp.svg)](https://badge.fury.io/js/algorand-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
# Algorand MCP Server

## Overview
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.

## Requirements
- Node.js v23.6.1 or later
- npm v10.2.4 or later

## Features
- 125 total tools:
  - 40 base tools (account, asset, application, transaction management)
  - 30 API tools (algod and indexer)
  - 6 NFDomains (NFD) tools for name services
  - 28 Vestige tools for DeFi analytics
  - 9 Tinyman tools for AMM interactions
  - 12 Ultrade tools for DEX functionality
- 30 resource endpoints for data access
- Built-in default configuration for quick setup
- Comprehensive transaction management
- Complete application lifecycle support
- Asset creation and management
- Real-time and historical data access
- NFDomains integration for name resolution and management
- Vestige integration for DeFi analytics and tracking (optional, disabled by default)
- Tinyman AMM integration for decentralized trading (optional, disabled by default)
- Ultrade DEX integration for trading and market operations (optional, disabled by default)

## Project Structure

```
src/
├── resources/                # MCP Resources (User-invokable endpoints)
│   ├── knowledge/           # Documentation and taxonomy
│   │   ├── taxonomy/        # Markdown documentation
│   │   ├── taxonomy-categories/ # Category JSON definitions
│   │   └── index.ts         # Knowledge resource handler
│   ├── wallet/             # Wallet management
│   │   └── index.ts         # Wallet resource handler
│   └── index.ts             # Resource registration
├── tools/                  # MCP Tools (Agent-invokable operations)
│   ├── accountManager.ts    # Account operations
│   ├── algodManager.ts      # Node interactions
│   ├── utilityManager.ts    # Utility functions
│   ├── apiManager/      # API Tools (Agent-accessible resource data)
│   │   ├── algod/          # Algod API tools
│   │   ├── indexer/        # Indexer API tools
│   │   ├── nfd/            # NFDomains tools
│   │   ├── vestige/        # Vestige DeFi tools
│   │   ├── tinyman/        # Tinyman AMM tools
│   │   └── ultrade/        # Ultrade DEX tools
│   └── transactionManager/ # Transaction handling
└── index.ts               # Server entry point
```

## MCP Components

### Resources
User-invokable endpoints that provide direct access to data and services:

1. Knowledge Resources:
   - algorand://knowledge/taxonomy - Full documentation taxonomy
   - algorand://knowledge/taxonomy/{category} - Category-specific documentation

Knowledge Tool:
- get_knowledge_doc - Get markdown content for specified knowledge documents
  - Parameters: `{ documents: string[] }` (e.g., ["ARCs:specs:arc-0020.md"])
  - Returns: Document content in markdown format

2. Wallet Resources:
   - algorand://wallet/account - Account information and balances
   - algorand://wallet/assets - Account Asset holdings and details

### API Tools
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:

- Algorand Node (algod) API for real-time blockchain data
- Indexer API for historical blockchain data
- NFDomains API for name services
- Vestige API for DeFi analytics
- Tinyman API for AMM operations
- Ultrade API for DEX functionality

Each API tool follows a consistent naming convention with the `api_` prefix for clarity and better UX.

## Installation

To install or update the Algorand MCP implementation, clone the repository, install the dependencies and build the project":

First check node version to be 23.6.1 or later:
```bash
node -v
```

Upgrade to 23.6.1 or later if needed!

Then check the Claude or Cursor container folders to have mcp-servers folder (if not create one):
```bash
mkdir PATH_ON_YOUR_MACHINE/Claude/mcp-servers
# or for Cursor 
mkdir PATH_ON_YOUR_MACHINE/Cursor/mcp-servers
```
Then clone this repository under mcp-servers folder and install dependencies:

```bash
cd PATH_ON_YOUR_MACHINE/Claude/mcp-servers
# or for Cursor 
cd PATH_ON_YOUR_MACHINE/Cursor/mcp-servers
# Clone the repository
git clone https://github.com/GoPlausible/algorand-mcp.git
cd algorand-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Edit the .env file to set your configurations
```
And you are done! Now you can open you MCP config and add the server as :

```json
{
  "mcpServers": {
    "algorand-mcp": {
      "command": "node",
      "args": [
        "PATH_ON_YOUR_MACHINE/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js"
     ],
      "env": {
        "ALGORAND_NETWORK": "testnet",
        "ALGORAND_ALGOD_API": "https://testnet-api.algonode.cloud/v2",
        "ALGORAND_ALGOD": "https://testnet-api.algonode.cloud",
        "ALGORAND_INDEXER_API": "https://testnet-idx.algonode.cloud/v2",
        "ALGORAND_INDEXER": "https://testnet-idx.algonode.cloud",
        "ALGORAND_ALGOD_PORT": "",
        "ALGORAND_INDEXER_PORT": "",
        "ALGORAND_TOKEN": "",
        "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",
        "NFD_API_URL": "https://api.nf.domains",
        "NFD_API_KEY": "",
        "TINYMAN_ACTIVE": "false",
        "ULTRADE_ACTIVE": "false",
        "ULTRADE_API_URL": "https://api.ultrade.io",
        "VESTIGE_ACTIVE": "false",
        "VESTIGE_API_URL": "https://api.vestigelabs.org",
        "VESTIGE_API_KEY": "",
        "ITEMS_PER_PAGE": "10"

      }
    }
  }
}
```
Make sure yopu change the paths to match your local system's paths.

For example on MACOS and Claud, the path would be something like this:

```json
{
  "mcpServers": {
    "algorand-mcp": {
      "command": "node",
      "args": [
        " /Users/YOUR_USERNAME/Library/Application\ Support/Claude/mcp-servers/algorand-mcp/packages/server/dist/index.js"
     ]
    }
  }
}
```

## Available Tools

### Knowledge Resources
Static URIs for accessing Algorand's comprehensive documentation:

- algorand://knowledge/taxonomy - Full documentation taxonomy
- algorand://knowledge/taxonomy/arcs - ARCs documentation
- algorand://knowledge/taxonomy/sdks - SDKs documentation
- algorand://knowledge/taxonomy/algokit - AlgoKit documentation
- algorand://knowledge/taxonomy/algokit-utils - AlgoKit Utils documentation
- algorand://knowledge/taxonomy/tealscript - TEALScript documentation
- algorand://knowledge/taxonomy/puya - Puya documentation
- algorand://knowledge/taxonomy/liquid-auth - Liquid Auth documentation
- algorand://knowledge/taxonomy/python - Python development resources
- algorand://knowledge/taxonomy/developers - Developer documentation
- algorand://knowledge/taxonomy/clis - CLI tools documentation
- algorand://knowledge/taxonomy/nodes - Node management documentation
- algorand://knowledge/taxonomy/details - Technical details documentation

Each resource provides direct access to its respective documentation category in markdown format.

### API Tools
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.


#### Algod API Tools
- api_algod_get_account_info: Get current account balance, assets, and auth address from algod
- api_algod_get_account_application_info: Get account-specific application information from algod
- api_algod_get_account_asset_info: Get account-specific asset information from algod
- api_algod_get_application_by_id: Get application information
- api_algod_get_application_box: Get application box by name
- api_algod_get_application_boxes: Get all application boxes
- api_algod_get_asset_by_id: Get current asset information from algod
- api_algod_get_pending_transaction: Get pending transaction information
- api_algod_get_pending_transactions_by_address: Get pending transactions for an address
- api_algod_get_pending_transactions: Get all pending transactions
- api_algod_get_transaction_params: Get suggested transaction parameters
- api_algod_get_node_status: Get current node status
- api_algod_get_node_status_after_block: Get node status after a specific round

#### Indexer API Tools
- api_indexer_lookup_account_by_id: Get account information from indexer
- api_indexer_lookup_account_transactions: Get account transaction history
- api_indexer_lookup_account_assets: Get account assets
- api_indexer_lookup_account_app_local_states: Get account application local states
- api_indexer_lookup_account_created_applications: Get applications created by this account
- api_indexer_lookup_applications: Get application information from indexer
- api_indexer_lookup_application_logs: Get application log messages
- api_indexer_lookup_application_box: Get application box by name
- api_indexer_lookup_application_boxes: Get all application boxes
- api_indexer_lookup_asset_by_id: Get asset information and configuration
- api_indexer_lookup_asset_balances: Get accounts holding this asset and their balances
- api_indexer_lookup_asset_transactions: Get transactions involving this asset
- api_indexer_lookup_transaction_by_id: Get transaction information by ID
- api_indexer_search_accounts: Search for accounts with various criteria
- api_indexer_search_for_applications: Search for applications with various criteria
- api_indexer_search_for_assets: Search for assets with various criteria
- api_indexer_search_for_transactions: Search for transactions with various criteria

#### NFDomains (NFD) API Tools
- api_nfd_get_nfd: Get a specific NFD by name or application ID
- api_nfd_get_nfds_for_addresses: Get NFDs for specific addresses
- api_nfd_get_nfd_activity: Get activity/changes for NFDs
- api_nfd_get_nfd_analytics: Get analytics data for NFDs
- api_nfd_browse_nfds: Browse NFDs with various filters
- api_nfd_search_nfds: Search NFDs with various filters

#### Vestige API Tools

1. View Tools:
- api_vestige_view_networks: Get all networks
- api_vestige_view_network_by_id: Get network by id
- api_vestige_view_protocols: Get all protocols
- api_vestige_view_protocol_by_id: Get protocol by id
- api_vestige_view_protocol_volumes: Get protocol volumes at specific day
- api_vestige_view_assets: Get data about assets
- api_vestige_view_assets_list: Get asset list
- api_vestige_view_assets_search: Search assets by query
- api_vestige_view_asset_price: Get asset prices
- api_vestige_view_asset_candles: Get asset candles
- api_vestige_view_asset_history: Get asset volume, swaps, total lockup, vwap and confidence history
- api_vestige_view_asset_composition: Get asset lockups based on protocol and pair
- api_vestige_view_pools: Get pools
- api_vestige_view_vaults: Get all vaults
- api_vestige_view_balances: Get balances by network id, protocol id and asset id
- api_vestige_view_notes: Get notes by network id and optionally asset id
- api_vestige_view_first_asset_notes: Get first note for assets
- api_vestige_view_asset_notes_count: Get notes count for assets
- api_vestige_view_swaps: Get swaps

2. Swap Tools:
- api_vestige_get_best_v4_swap_data: Get best V4 swap data
- api_vestige_get_v4_swap_discount: Get V4 swap discount
- api_vestige_get_v4_swap_data_transactions: Get V4 swap data transactions
- api_vestige_get_aggregator_stats: Get aggregator stats

3. Currency Tools:
- api_vestige_view_currency_prices: Get all latest currency prices
- api_vestige_view_currency_price_history: Get currency prices by timestamp range
- api_vestige_view_currency_price: Get currency price by timestamp
- api_vestige_view_currency_average_price: Get average price for currency
- api_vestige_view_currency_prices_simple_30d: Get currency prices for last 30 days

#### Tinyman API Tools
- api_tinyman_get_pool: Get Tinyman pool information by asset pair
  - Parameters: asset1Id, asset2Id, version (v1_1 or v2)
  - Returns: Pool status, validator app ID, assets, and reserves

- api_tinyman_get_pool_analytics: Get analytics for a Tinyman pool
  - Parameters: asset1Id, asset2Id, version
  - Returns: Pool status, emptiness check, pair ratio, and reserves

- api_tinyman_get_pool_creation_quote: Get quote for creating a new pool
  - Parameters: asset1Id, asset2Id, initiatorAddr, version
  - Returns: Transaction count and estimated fees

- api_tinyman_get_liquidity_quote: Get quote for adding liquidity
  - Parameters: asset1Id, asset2Id, asset1Amount, asset2Amount, mode (initial/flexible/singleAsset), version
  - Returns: Liquidity quote with expected pool tokens

- api_tinyman_get_remove_liquidity_quote: Get quote for removing liquidity
  - Parameters: asset1Id, asset2Id, poolTokenAmount, initiatorAddr, slippage, singleAssetMode, version
  - Returns: Remove liquidity quote with expected asset amounts

- api_tinyman_get_swap_quote: Get quote for swapping assets
  - Parameters: assetIn, assetOut, amount, mode (fixedInput/fixedOutput), version
  - Returns: Swap quote with expected output/input amount

- api_tinyman_get_asset_optin_quote: Get quote for opting into pool token
  - Parameters: assetId, initiatorAddr
  - Returns: Transaction count and estimated fees

- api_tinyman_get_validator_optin_quote: Get quote for opting into validator
  - Parameters: initiatorAddr, version
  - Returns: Transaction count and estimated fees

- api_tinyman_get_validator_optout_quote: Get quote for opting out of validator
  - Parameters: initiatorAddr, version
  - Returns: Transaction count and estimated fees

#### Ultrade API Tools

1. Wallet Tools:
- api_ultrade_wallet_signin_message: Generate message from the sign in data
  - Parameters: data (address, technology), customMessage (optional)
  - Returns: Message to be signed

- api_ultrade_wallet_signin: Sign in to trading account
  - Parameters: message, signature, data (address, technology), referralToken (optional)
  - Returns: Session token

- api_ultrade_wallet_add_key: Add a trading key
  - Parameters: message, signature, walletAddress, walletToken
  - Returns: Trading key details

- api_ultrade_wallet_revoke_key: Revoke a trading key
  - Parameters: message, signature, walletAddress, walletToken
  - Returns: Operation status

- api_ultrade_wallet_keys: Get trading keys
  - Parameters: walletAddress, walletToken
  - Returns: List of trading keys

- api_ultrade_wallet_key_message: Generate message from the trading key data
  - Parameters: tkAddress, loginAddress, loginChainId, expiredDate (optional), addKey, type
  - Returns: Message to be signed

- api_ultrade_wallet_trades: Get filtered wallet trades
  - Parameters: walletAddress, walletToken (optional), tradingKey (optional)
  - Returns: List of trades

- api_ultrade_wallet_transactions: Get filtered wallet transactions
  - Parameters: walletAddress, walletToken (optional), tradingKey (optional)
  - Returns: List of transactions

- api_ultrade_wallet_withdraw: Withdraw token
  - Parameters: message, signature, walletAddress, walletToken
  - Returns: Withdrawal status

- api_ultrade_wallet_withdraw_message: Generate message from the withdrawal data
  - Parameters: data (withdrawal details), customMessage (optional)
  - Returns: Message to be signed

2. Market Tools:
- api_ultrade_market_symbols: Get market symbols
  - Returns: List of available trading pairs

- api_ultrade_market_details: Get market details
  - Parameters: symbol
  - Returns: Detailed market information

- api_ultrade_market_price: Get last market price by pair symbol
  - Parameters: symbol
  - Returns: Current market price

- api_ultrade_market_depth: Get order book depth
  - Parameters: symbol, depth
  - Returns: Order book with bids and asks

- api_ultrade_market_last_trades: Get last trades
  - Parameters: symbol, limit (optional)
  - Returns: Recent trade history

- api_ultrade_market_history: Get market history
  - Parameters: symbol, interval, startTime, endTime, limit (optional)
  - Returns: Historical market data

- api_ultrade_market_assets: Get trading assets
  - Returns: List of supported assets

- api_ultrade_market_fee_rates: Get fee rates
  - Returns: Current trading fee rates

- api_ultrade_market_chains: Get blockchain chains
  - Returns: Supported blockchain networks

- api_ultrade_market_withdrawal_fee: Get withdrawal fee
  - Parameters: tokenIndex, tokenChainId, recipientChainId
  - Returns: Withdrawal fee information

- api_ultrade_market_operation_details: Get operation details
  - Parameters: operationId
  - Returns: Operation status and details

- api_ultrade_market_settings: Get market settings
  - Parameters: domain
  - Returns: Market configuration

- api_ultrade_market_orders: Get orders
  - Parameters: walletAddress, walletToken, tradingKey (optional), companyId (optional)
  - Returns: List of orders

- api_ultrade_market_open_orders: Get open orders
  - Parameters: walletAddress, walletToken, tradingKey (optional), symbol (optional)
  - Returns: List of active orders

- api_ultrade_market_order_by_id: Get order by ID
  - Parameters: orderId, walletAddress, walletToken, tradingKey (optional)
  - Returns: Order details

- api_ultrade_market_order_message: Generate message from the order data
  - Parameters: data (order details)
  - Returns: Message to be signed

- api_ultrade_market_create_order: Create new order
  - Parameters: message, signature, walletAddress, walletToken
  - Returns: Order creation status

- api_ultrade_market_create_orders: Create new orders
  - Parameters: orders (array of message/signature pairs), walletAddress, walletToken
  - Returns: Batch order creation status

- api_ultrade_market_cancel_order: Cancel open order
  - Parameters: orderId, walletAddress, walletToken
  - Returns: Order cancellation status

- api_ultrade_market_cancel_orders: Cancel multiple open orders
  - Parameters: orderIds, walletAddress, walletToken
  - Returns: Batch cancellation status

3. System Tools:
- api_ultrade_system_time: Get current system time
  - Returns: Server timestamp

- api_ultrade_system_maintenance: Get system maintenance status
  - Returns: Maintenance mode information

- api_ultrade_system_version: Get system version
  - Returns: Current API version

### Account Management Tools

1. `create_account`
   - Creates a new Algorand account
   - Returns address and mnemonic
   - No parameters required

2. `rekey_account`
   - Rekeys an account to a new address
   - Parameters:
     ```typescript
     {
       sourceAddress: string,  // Account to rekey
       targetAddress: string   // New authorized address
     }
     ```

3. `mnemonic_to_mdk`
   - Converts mnemonic to master derivation key
   - Parameters: `{ mnemonic: string }`

4. `mdk_to_mnemonic`
   - Converts master derivation key to mnemonic
   - Parameters: `{ mdk: string }`

5. `secret_key_to_mnemonic`
   - Converts secret key to mnemonic
   - Parameters: `{ secretKey: string }`

6. `mnemonic_to_secret_key`
   - Converts mnemonic to secret key
   - Parameters: `{ mnemonic: string }`

7. `seed_from_mnemonic`
   - Generates seed from mnemonic
   - Parameters: `{ mnemonic: string }`

8. `mnemonic_from_seed`
   - Generates mnemonic from seed
   - Parameters: `{ seed: string }`

9. `validate_address`
   - Validates Algorand address format
   - Parameters: `{ address: string }`

10. `encode_address`
    - Encodes public key to address
    - Parameters: `{ publicKey: string }`

11. `decode_address`
    - Decodes address to public key
    - Parameters: `{ address: string }`

### Application Tools

12. `make_app_create_txn`
    - Creates application creation transaction
    - Parameters:
      ```typescript
      {
        from: string,
        approvalProgram: string,
        clearProgram: string,
        numGlobalByteSlices: number,
        numGlobalInts: number,
        numLocalByteSlices: number,
        numLocalInts: number,
        extraPages?: number,
        note?: string,
        lease?: string,
        rekeyTo?: string,
        appArgs?: string[],
        accounts?: string[],
        foreignApps?: number[],
        foreignAssets?: number[]
      }
      ```

13. `make_app_update_txn`
    - Creates application update transaction
    - Parameters: Similar to create with appIndex

14. `make_app_delete_txn`
    - Creates application deletion transaction
    - Parameters: `{ from: string, appIndex: number }`

15. `make_app_optin_txn`
    - Creates application opt-in transaction
    - Parameters: `{ from: string, appIndex: number }`

16. `make_app_closeout_txn`
    - Creates application close-out transaction
    - Parameters: `{ from: string, appIndex: number }`

17. `make_app_clear_txn`
    - Creates application clear state transaction
    - Parameters: `{ from: string, appIndex: number }`

18. `make_app_call_txn`
    - Creates application call transaction
    - Parameters:
      ```typescript
      {
        from: string,
        appIndex: number,
        appArgs?: string[],
        accounts?: string[],
        foreignApps?: number[],
        foreignAssets?: number[]
      }
      ```

19. `get_application_address`
    - Gets application's escrow address
    - Parameters: `{ appId: number }`

### Asset Tools

20. `make_asset_create_txn`
    - Creates asset creation transaction
    - Parameters:
      ```typescript
      {
        from: string,
        total: number,
        decimals: number,
        defaultFrozen: boolean,
        unitName?: string,
        assetName?: string,
        assetURL?: string,
        assetMetadataHash?: string,
        manager?: string,
        reserve?: string,
        freeze?: string,
        clawback?: string
      }
      ```

21. `make_asset_config_txn`
    - Creates asset configuration transaction
    - Parameters:
      ```typescript
      {
        from: string,
        assetIndex: number,
        manager?: string,
        reserve?: string,
        freeze?: string,
        clawback?: string,
        strictEmptyAddressChecking: boolean
      }
      ```

22. `make_asset_destroy_txn`
    - Creates asset destruction transaction
    - Parameters: `{ from: string, assetIndex: number }`

23. `make_asset_freeze_txn`
    - Creates asset freeze transaction
    - Parameters:
      ```typescript
      {
        from: string,
        assetIndex: number,
        freezeTarget: string,
        freezeState: boolean
      }
      ```

24. `make_asset_transfer_txn`
    - Creates asset transfer transaction
    - Parameters:
      ```typescript
      {
        from: string,
        to: string,
        assetIndex: number,
        amount: number,
        closeRemainderTo?: string
      }
      ```

### Transaction Tools

25. `make_payment_txn`
    - Creates payment transaction
    - Parameters:
      ```typescript
      {
        from: string,
        to: string,
        amount: number,
        closeRemainderTo?: string
      }
      ```

26. `assign_group_id`
    - Assigns group ID to transactions
    - Parameters: `{ transactions: Transaction[] }`

27. `sign_transaction`
    - Signs transaction with secret key
    - Parameters:
      ```typescript
      {
        transaction: Transaction,
        sk: string
      }
      ```

28. `sign_bytes`
    - Signs arbitrary bytes
    - Parameters: `{ bytes: string, sk: string }`

29. `send_raw_transaction`
    - Broadcasts signed transactions
    - Parameters: `{ signedTxns: string[] }`

30. `simulate_raw_transactions`
    - Simulates raw transactions
    - Parameters: `{ txns: string[] }`

### Key Management Tools

31. `generate_key_pair`
    - Generates new public/private key pair
    - Parameters: None
    - Returns: `{ publicKey: string, privateKey: string }`

32. `derive_key`
    - Derives a key from a master key
    - Parameters: `{ masterKey: string, index: number }`

### Utility Tools

33. `encode_obj`
    - Encodes object to msgpack
    - Parameters: `{ obj: any }`

34. `decode_obj`
    - Decodes msgpack to object
    - Parameters: `{ bytes: string }`

35. `bytes_to_bigint`
    - Converts bytes to BigInt
    - Parameters: `{ bytes: string }`

36. `bigint_to_bytes`
    - Converts BigInt to bytes
    - Parameters: `{ value: string, size: number }`

37. `encode_uint64`
    - Encodes uint64 to bytes
    - Parameters: `{ value: string }`

38. `decode_uint64`
    - Decodes bytes to uint64
    - Parameters: `{ bytes: string }`

39. `compile_teal`
    - Compiles TEAL source code
    - Parameters: `{ source: string }`

40. `disassemble_teal`
    - Disassembles TEAL bytecode
    - Parameters: `{ bytecode: string }`

## Available Resources

### Algod Resources (Real-time State)

1. `algorand://algod/accounts/{address}`
   - Gets current account information
   - Returns: Balance, assets, auth address

2. `algorand://algod/accounts/{address}/application/{app-id}`
   - Gets account's application state
   - Returns: Local state for specific app

3. `algorand://algod/accounts/{address}/asset/{asset-id}`
   - Gets account's asset holding
   - Returns: Asset balance and frozen state

4. `algorand://algod/applications/{app-id}`
   - Gets application information
   - Returns: Global state, creator, approval/clear programs

5. `algorand://algod/applications/{app-id}/box/{name}`
   - Gets application box contents
   - Returns: Box value

6. `algorand://algod/applications/{app-id}/boxes`
   - Lists all application boxes
   - Returns: Box names and sizes

7. `algorand://algod/assets/{asset-id}`
   - Gets asset information
   - Returns: Asset parameters and current state

8. `algorand://algod/transactions/pending/{txid}`
   - Gets pending transaction
   - Returns: Transaction details

9. `algorand://algod/accounts/{address}/transactions/pending`
   - Lists pending transactions for account
   - Returns: Array of transactions

10. `algorand://algod/transactions/pending`
    - Lists all pending transactions
    - Returns: Array of transactions

11. `algorand://algod/transactions/params`
    - Gets suggested parameters
    - Returns: Current network parameters

12. `algorand://algod/status`
    - Gets node status
    - Returns: Current round, versions

### Block Resources

1. `algorand://algod/blocks/latest`
   - Gets latest block information
   - Returns: Latest block header and transactions

2. `algorand://algod/blocks/{round}`
   - Gets specific block information
   - Returns: Block header and transactions

3. `algorand://algod/blocks/{round}/transactions`
   - Gets transactions in specific block
   - Returns: Array of transactions

4. `algorand://indexer/blocks/{round}`
   - Gets historical block information
   - Returns: Block details with transactions

### Health Resources

5. `algorand://algod/health`
   - Gets node health status
   - Returns: Node health information

6. `algorand://indexer/health`
   - Gets indexer health status
   - Returns: Indexer health information

### Genesis Resources

7. `algorand://algod/genesis`
   - Gets genesis information
   - Returns: Network genesis configuration

8. `algorand://indexer/genesis`
   - Gets historical genesis information
   - Returns: Network genesis details

### Network Resources

9. `algorand://algod/versions`
   - Gets supported protocol versions
   - Returns: Supported versions information

10. `algorand://algod/metrics`
    - Gets node metrics
    - Returns: Performance metrics

### Supply Resources

11. `algorand://algod/ledger/supply`
    - Gets current supply information
    - Returns: Total and online stake

12. `algorand://indexer/supply`
    - Gets historical supply information
    - Returns: Historical supply data

### Participation Resources

13. `algorand://algod/participation`
    - Gets participation key information
    - Returns: Key registration info

14. `algorand://algod/participation/keys`
    - Lists participation keys
    - Returns: Array of keys

15. `algorand://algod/participation/keys/{id}`
    - Gets specific participation key
    - Returns: Key details

### Fee Resources

16. `algorand://algod/transactions/fee`
    - Gets suggested fee
    - Returns: Current fee information

17. `algorand://indexer/fee-distribution`
    - Gets historical fee distribution
    - Returns: Fee statistics

### Protocol Resources

18. `algorand://algod/protocol`
    - Gets current protocol parameters
    - Returns: Protocol configuration

19. `algorand://indexer/protocol-upgrades`
    - Gets protocol upgrade history
    - Returns: Upgrade information

### Node Resources

20. `algorand://algod/ready`
    - Checks if node is ready
    - Returns: Readiness status

21. `algorand://algod/sync`
    - Gets node sync status
    - Returns: Sync information

22. `algorand://algod/peers`
    - Lists connected peers
    - Returns: Peer information

23. `algorand://algod/catchup`
    - Gets catchup information
    - Returns: Catchup status

### Compile Resources

24. `algorand://algod/compile/teal`
    - Compiles TEAL program
    - Returns: Compilation result

25. `algorand://algod/compile/teal/disassemble`
    - Disassembles TEAL bytecode
    - Returns: Source code

26. `algorand://algod/compile/teal/dryrun`
    - Dry runs TEAL program
    - Returns: Execution result

### Debug Resources

27. `algorand://algod/debug/accounts/{address}`
    - Gets detailed account debug info
    - Returns: Internal state

28. `algorand://algod/debug/txns/{txid}`
    - Gets transaction debug info
    - Returns: Execution details

29. `algorand://algod/debug/blocks/{round}`
    - Gets block debug info
    - Returns: Internal state

30. `algorand://algod/debug/ledger`
    - Gets ledger debug info
    - Returns: Database state

### Indexer Resources (Historical Data)

31. `algorand://indexer/accounts/{address}`
    - Gets account history
    - Returns: Historical account state

32. `algorand://indexer/accounts/{address}/transactions`
    - Gets account transactions
    - Returns: Transaction history

33. `algorand://indexer/accounts/{address}/apps-local-state`
    - Gets account's application states
    - Returns: All local states

34. `algorand://indexer/accounts/{address}/created-applications`
    - Gets created applications
    - Returns: Applications created by account

35. `algorand://indexer/applications/{app-id}`
    - Gets application history
    - Returns: Historical application state

36. `algorand://indexer/applications/{app-id}/logs`
    - Gets application logs
    - Returns: Historical log messages

37. `algorand://indexer/applications/{app-id}/box/{name}`
    - Gets historical box state
    - Returns: Box value at specific round

38. `algorand://indexer/applications/{app-id}/boxes`
    - Lists historical boxes
    - Returns: Box names at specific round

39. `algorand://indexer/applications`
    - Searches applications
    - Returns: Matching applications

40. `algorand://indexer/assets/{asset-id}`
    - Gets asset history
    - Returns: Historical asset state

41. `algorand://indexer/assets/{asset-id}/balances`
    - Gets asset holders
    - Returns: Accounts holding asset

42. `algorand://indexer/assets/{asset-id}/transactions`
    - Gets asset transactions
    - Returns: Transactions involving asset

43. `algorand://indexer/assets/{asset-id}/balances/{address}`
    - Gets historical asset balance
    - Returns: Account's asset balance

44. `algorand://indexer/assets/{asset-id}/transactions/{txid}`
    - Gets specific asset transaction
    - Returns: Transaction details

45. `algorand://indexer/assets`
    - Searches assets
    - Returns: Matching assets

46. `algorand://indexer/transactions/{txid}`
    - Gets transaction details
    - Returns: Historical transaction

47. `algorand://indexer/transactions`
    - Searches transactions
    - Returns: Matching transactions

## Response Format

All responses follow a standardized format using ResponseProcessor:

```typescript
{
  "data": {
    // Response data here
  },
  "metadata": {  // Only for paginated responses
    "totalItems": number,
    "itemsPerPage": number,
    "currentPage": number,
    "totalPages": number,
    "hasNextPage": boolean,
    "pageToken": string,
    "arrayField": string  // Name of paginated array field
  }
}
```


## Error Handling

The server provides detailed error messages for common issues:

- Invalid parameters
- Network connection errors
- Transaction failures
- Resource not found errors
- Authorization errors

Errors are returned in a standardized format:
```typescript
{
  "error": {
    "code": string,
    "message": string
  }
}
```


## License
MIT

```

--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------

```markdown
# Contributing to Algorand MCP

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.

## Project Structure

```
packages/server/src/
├── tools/
│   ├── apiManager/          # Resource-specific tool implementations
│   │   ├── [provider]/         # Provider-specific directory (e.g., tinyman, ultrade)
│   │   │   ├── index.ts        # Exports all tools
│   │   │   └── [feature].ts    # Feature-specific implementations
│   └── utils/                  # Shared utilities
│     └── responseProcessor.ts  # Response formatting utility
├── algorand-client/            # Algorand client integration
│   └── index.ts                # Client initialization and configuration
└── API specs/                  # API specifications and documentation 
```

## Adding New Tools

### 1. Create Provider Directory

Create a new directory under `packages/server/src/tools/apiManager/` for your provider:

```bash
mkdir packages/server/src/tools/apiManager/your-provider
```

### 2. Implement Tool Handlers

Create separate files for different features. Each file should:
- Export tool handlers
- Define input schemas
- Implement error handling
- Include documentation

Example structure:

```typescript
// packages/server/src/tools/apiManager/your-provider/feature.ts

import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';

// Define input schema
export const featureToolSchema = {
  type: 'object',
  properties: {
    param1: {
      type: 'string',
      description: 'Description of parameter'
    },
    // ... other parameters
  },
  required: ['param1']
};

// Implement tool handler
export const featureTool = async (args: any) => {
  try {
    // Input validation
    if (!args.param1) {
      throw new McpError(
        ErrorCode.InvalidParams,
        'Missing required parameter: param1'
      );
    }

    // Implementation
    const result = await yourImplementation(args);

    // Return result directly - MCP server handles wrapping
    return result;
  } catch (error) {
    // Error handling
    if (error instanceof McpError) {
      throw error;
    }
    throw new McpError(
      ErrorCode.InternalError,
      `Feature operation failed: ${error.message}`
    );
  }
};
```

### 3. Create Index File

Create an `index.ts` file to export all tools:

```typescript
// packages/server/src/tools/apiManager/your-provider/index.ts

import { McpError, ErrorCode, Tool } from '@modelcontextprotocol/sdk/types.js';
import { featureTool, featureToolSchema } from './feature.js';

// Define tool configurations
export const providerTools: Tool[] = [
  {
    name: 'api_provider_feature',
    description: 'Feature description',
    handler: featureTool,
    inputSchema: featureToolSchema
  }
];

// Handle provider tools
export async function handleProviderTools(name: string, args: any): Promise<any> {
  switch (name) {
    case 'api_provider_feature':
      return featureTool(args);
    default:
      throw new McpError(
        ErrorCode.MethodNotFound,
        `Unknown tool: ${name}`
      );
  }
}
```

## Code Style Guidelines

1. **TypeScript**
   - Use strict type checking
   - Define interfaces for all data structures
   - Use type guards for runtime checks

2. **Async/Await**
   - Use async/await for asynchronous operations
   - Properly handle promises and errors

3. **Error Handling**
   - Use McpError for standardized error reporting
   - Include descriptive error messages
   - Add appropriate error context

4. **Naming Conventions**
   - PascalCase for classes and types
   - camelCase for functions and variables
   - snake_case for tool names

## Response Processing

### ResponseProcessor Overview
The ResponseProcessor is a utility class that handles response formatting and pagination in a standardized way. It provides:
1. Automatic pagination for large arrays and objects
2. Consistent response wrapping
3. Deep object traversal and processing
4. Page token generation and handling

### Key Features
1. **Automatic Pagination**
   - Handles arrays longer than `env.items_per_page`
   - Generates page tokens for navigation
   - Maintains metadata about pagination state

2. **Deep Object Processing**
   - Recursively processes nested objects
   - Handles arrays at any level of nesting
   - Preserves object structure while paginating

3. **Smart Pagination**
   - Skips pagination for special cases (e.g., application global-state)
   - Handles both arrays and objects with many keys
   - Preserves data integrity during pagination

### Usage Patterns

1. **Direct Usage**
```typescript
import { ResponseProcessor } from '../../utils/responseProcessor.js';

// Process a simple response
const result = ResponseProcessor.processResponse(data);

// Process with pagination
const result = ResponseProcessor.processResponse(data, pageToken);
```

2. **Response Structure**
```typescript
// Input: Any data structure
const data = {
  field1: 'value1',
  arrayField: [1, 2, 3, ...],
  nestedObject: {
    subArray: [...]
  }
};

// Output: Processed and paginated response
{
  content: [{
    type: 'text',
    text: JSON.stringify({
      data: {
        field1: 'value1',
        arrayField: [1, 2, 3], // Paginated if needed
        nestedObject: {
          subArray: [...] // Also paginated if needed
        }
      },
      metadata: { // Only present if pagination occurred
        totalItems: 100,
        itemsPerPage: 10,
        currentPage: 1,
        totalPages: 10,
        hasNextPage: true,
        pageToken: 'base64token',
        arrayField: 'arrayField' // Indicates which field was paginated
      }
    }, null, 2)
  }]
}
```

3. **Pagination Control**
```typescript
// Environment configuration
env.items_per_page = 10; // Default page size

// Automatic pagination triggers when:
// - Arrays have more items than items_per_page
// - Objects have more keys than items_per_page
```

### Best Practices

1. **Return Raw Data**
```typescript
// Good: Let ResponseProcessor handle wrapping
return accountInfo;

// Bad: Manual wrapping
return {
  content: [{
    type: 'text',
    text: JSON.stringify(accountInfo)
  }]
};
```

2. **Handle Page Tokens**
```typescript
export const yourTool = async (args: { pageToken?: string }) => {
  // Get data
  const data = await getData();
  
  // Let ResponseProcessor handle pagination
  return data;
};
```

3. **Preserve Data Structure**
```typescript
// ResponseProcessor maintains structure while paginating
const response = {
  summary: "Account info",
  details: {
    assets: [...], // Will be paginated if needed
    apps: [...] // Will be paginated if needed
  }
};
```

### Error Handling
```typescript
try {
  const data = await getData();
  return data; // ResponseProcessor will handle wrapping
} catch (error) {
  throw new McpError(
    ErrorCode.InternalError,
    `Operation failed: ${error.message}`
  );
}
```

## Response Handling

### Direct Response Pattern
Tools should return their data directly. The MCP server framework handles:
1. Response wrapping
2. Pagination for large datasets
3. Metadata generation

Example of server-handled pagination:
```json
{
  "data": {
    "address": "...",
    "assets": [...]
  },
  "metadata": {
    "totalItems": 355,
    "itemsPerPage": 10,
    "currentPage": 1,
    "totalPages": 36,
    "hasNextPage": true,
    "pageToken": "cGFnZV8y",
    "arrayField": "assets"
  }
}
```

### Pagination Support
- The MCP server automatically handles pagination for large arrays
- Tools can accept pageToken parameter for subsequent pages
- No need to manually implement pagination logic

## Current Example Implementation

The example tool demonstrates these concepts:

```typescript
// packages/server/src/tools/apiManager/example/get-balance.ts

import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
import { algodClient } from '../../../algorand-client.js';

export const getBalanceToolSchema: { type: "object", properties: any, required: string[] } = {
  type: "object",
  properties: {
    address: {
      type: 'string',
      description: 'Algorand address in standard format (58 characters)'
    }
  },
  required: ['address']
};

export const getBalanceTool = async (args: { address: string }) => {
  try {
    // Input validation
    if (!args.address) {
      throw new McpError(
        ErrorCode.InvalidParams,
        'Missing required parameter: address'
      );
    }

    if (!/^[A-Z2-7]{58}$/.test(args.address)) {
      throw new McpError(
        ErrorCode.InvalidParams,
        'Invalid Algorand address format'
      );
    }

    // Get account information using Algorand client
    const accountInfo = await algodClient.accountInformation(args.address).do();

    // Return account info directly - MCP server handles pagination
    return accountInfo;
  } catch (error: unknown) {
    // Handle specific Algorand API errors
    if (error instanceof McpError) {
      throw error;
    }

    // Format error response
    const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
    throw new McpError(
      ErrorCode.InternalError,
      `Failed to get account balance: ${errorMessage}`
    );
  }
};
```

Key features demonstrated:
1. Proper import paths with .js extensions
2. TypeScript type definitions
3. Input validation
4. Direct response pattern
5. Error handling
6. Integration with Algorand client
7. Automatic pagination support

## Testing Requirements

1. Create test files mirroring your tool structure:

```typescript
// packages/server/tests/tools/apiManager/your-provider/feature.test.ts

describe('Your Provider Feature Tool', () => {
  it('should handle valid input correctly', async () => {
    // Test implementation
  });

  it('should handle invalid input appropriately', async () => {
    // Test error cases
  });

  // Add more test cases
});
```



## Documentation Standards

1. **JSDoc Comments**
```typescript
/**
 * Description of what the tool does
 * @param {Object} args - Tool arguments
 * @param {string} args.param1 - Description of parameter
 * @returns {Promise<Object>} Description of return value
 * @throws {McpError} Description of possible errors
 */
```

2. **Usage Examples**
```typescript
// Include example usage in comments
/*
Example usage:
{
  "param1": "example-value",
  "param2": 123
}

Example response:
{
  "data": {
    // Tool-specific data
  },
  "metadata": {
    // Pagination metadata if applicable
  }
}
*/
```

3. **Error Documentation**
- Document all possible error cases
- Include error codes and messages
- Provide troubleshooting guidance

## Best Practices

1. **Input Validation**
   - Validate all input parameters
   - Use type guards for runtime checks
   - Provide clear error messages

2. **Response Handling**
   - Return raw data directly
   - Let MCP server handle response wrapping
   - Let MCP server handle pagination

3. **Performance**
   - Implement caching where appropriate
   - Handle rate limits
   - Optimize network requests

4. **Security**
   - Validate all inputs
   - Sanitize sensitive data
   - Handle credentials securely

## Review Process

1. **Code Review Checklist**
   - Follows project structure
   - Implements proper error handling
   - Includes comprehensive tests
   - Provides clear documentation
   - Follows naming conventions
   - Handles edge cases

2. **Testing Requirements**
   - All tests pass
   - Adequate test coverage
   - Integration tests included
   - Performance tests if applicable

3. **Documentation Requirements**
   - JSDoc comments complete
   - Usage examples provided
   - Error cases documented
   - README updates if needed

## Getting Help

- Review existing implementations in `packages/server/src/tools/apiManager/`
- Check test files for examples
- Consult project maintainers
- Reference API specifications in `packages/server/API specs/`

Remember to follow the established patterns and maintain consistency with the existing codebase.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:crypto:merkle_tree.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:amm.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:auction.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:htlc_logicsig.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:defi:marketplace.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:events:arc28_events.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:governance:simple_voting.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:nft:proof_of_attendance.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:privacy:zk_whitelist.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:transactions.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:utility:calculator.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md:
--------------------------------------------------------------------------------

```markdown

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md:
--------------------------------------------------------------------------------

```markdown
# TITLE

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:tests_test_package_README.md:
--------------------------------------------------------------------------------

```markdown
This is a simple package that is used to test importing things from npm packages.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:examples_itxns_README.md:
--------------------------------------------------------------------------------

```markdown
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
Reti contracts from https://github.com/TxnLab/reti/tree/2567018024ab8c2b3c59142e26cb55ce78bd2414

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_amount_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/amount.spec

# Module: types/amount.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md:
--------------------------------------------------------------------------------

```markdown
# POST Assertion Request

This endpoint is used to request assertion options from the FIDO2 service.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md:
--------------------------------------------------------------------------------

```markdown
# POST Assertion Response

This endpoint is used to request assertion options from the FIDO2 service.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_app_client_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/app-client.spec

# Module: types/app-client.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_client_manager_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/client-manager.spec

# Module: types/client-manager.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:writing-contracts:python.md:
--------------------------------------------------------------------------------

```markdown
title: Python

Follow [this](https://algorandfoundation.github.io/puya/) link for the Algorand Python GitHub docs.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_account_manager_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/account-manager.spec

# Module: types/account-manager.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algorand-client.spec

# Module: types/algorand-client.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_dispenser_client_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/dispenser-client.spec

# Module: types/dispenser-client.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/async-event-emitter.spec

# Module: types/async-event-emitter.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algorand-client.asset.spec

# Module: types/algorand-client.asset.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/app-factory-and-client.spec

# Module: types/app-factory-and-client.spec

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algorand-client.transfer.spec

# Module: types/algorand-client.transfer.spec

```

--------------------------------------------------------------------------------
/packages/client/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src/**/*"]
}

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:CustomTokenHeader.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / CustomTokenHeader

# Interface: CustomTokenHeader

## Indexable

▪ [headerName: `string`]: `string`

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:examples:auction:README.md:
--------------------------------------------------------------------------------

```markdown
Port of Beaker auction contract to TEALScript. Original source: https://github.com/algorand-devrel/beaker-auction/tree/7e1fe62b852c0d819954a931f10cf39d841cbc02 



```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:api.md:
--------------------------------------------------------------------------------

```markdown

 ⛅️ wrangler 3.99.0 (update available 4.10.0)
---------------------------------------------

Downloading "puya:docs:api.md" from "plausibleai".
Download complete.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:examples_auction_README.md:
--------------------------------------------------------------------------------

```markdown
Port of Beaker auction contract to TEALScript. Original source: https://github.com/algorandfoundation/beaker-auction/tree/7e1fe62b852c0d819954a931f10cf39d841cbc02 



```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:api-algopy.md:
--------------------------------------------------------------------------------

```markdown

 ⛅️ wrangler 3.99.0 (update available 4.10.0)
---------------------------------------------

Downloading "puya:docs:api-algopy.md" from "plausibleai".
Download complete.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:api-algopy.op.md:
--------------------------------------------------------------------------------

```markdown

 ⛅️ wrangler 3.99.0 (update available 4.10.0)
---------------------------------------------

Downloading "puya:docs:api-algopy.op.md" from "plausibleai".
Download complete.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:api-algopy.arc4.md:
--------------------------------------------------------------------------------

```markdown

 ⛅️ wrangler 3.99.0 (update available 4.10.0)
---------------------------------------------

Downloading "puya:docs:api-algopy.arc4.md" from "plausibleai".
Download complete.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:api-algopy.gtxn.md:
--------------------------------------------------------------------------------

```markdown

 ⛅️ wrangler 3.99.0 (update available 4.10.0)
---------------------------------------------

Downloading "puya:docs:api-algopy.gtxn.md" from "plausibleai".
Download complete.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:api-algopy.itxn.md:
--------------------------------------------------------------------------------

```markdown

 ⛅️ wrangler 3.99.0 (update available 4.10.0)
---------------------------------------------

Downloading "puya:docs:api-algopy.itxn.md" from "plausibleai".
Download complete.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_amount.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/amount

# Module: types/amount

## Table of contents

### Classes

- [AlgoAmount](../classes/types_amount.AlgoAmount.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:avm:teal:guidelines.md:
--------------------------------------------------------------------------------

```markdown
title: Guidelines

See [Modern guidelines for smart contracts and smart signatures on Algorand](../../../smart-contracts/guidelines/) for details on writting safe smart contracts.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:typescript:packages:algo-ts:readme.md:
--------------------------------------------------------------------------------

```markdown
# Algorand TypeScript

This package contains definitions for the types which comprise Algorand TypeScript which can be compiled to run on the Algorand Virtual Machine using the Puya compiler.

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:tutorials:smart-contracts.md:
--------------------------------------------------------------------------------

```markdown
# Smart Contract Tutorial

_TODO_

[mental model image]

- Lifecycle
- Deploy-time immutability and permanence controls
- Deployment automation
- ...

## Next steps

- Read the architecture decision

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:ABIContractNetworks.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / ABIContractNetworks

# Interface: ABIContractNetworks

## Indexable

▪ [network: `string`]: [`ABIContractNetworkInfo`](ABIContractNetworkInfo.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algorand-client

# Module: types/algorand-client

## Table of contents

### Classes

- [AlgorandClient](../classes/types_algorand_client.AlgorandClient.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_kmd_account_manager.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/kmd-account-manager

# Module: types/kmd-account-manager

## Table of contents

### Classes

- [KmdAccountManager](../classes/types_kmd_account_manager.KmdAccountManager.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:examples_lsig_with_app_README.md:
--------------------------------------------------------------------------------

```markdown
[lsig_with_app.algo.ts](./lsig_with_app.algo.ts) contains the source code for the application and the logic signature

[lsig_with_app.test.ts](./lsig_with_app.test.ts) contains the code for compiling and using the delegated logic signature
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:examples:README.md:
--------------------------------------------------------------------------------

```markdown
## Algorand JavaScript SDK Examples

This directory contains examples of how to use the Algorand JavaScript SDK.

Assuming a sandbox node is running locally, any example can be run with the following command:

```sh
    ts-node <example_name>.ts
```

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_config.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/config

# Module: types/config

## Table of contents

### Classes

- [UpdatableConfig](../classes/types_config.UpdatableConfig.md)

### Interfaces

- [Config](../interfaces/types_config.Config.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:decisions:README.md:
--------------------------------------------------------------------------------

```markdown
# Decisions for this Project

- [1. Service Authentication](1-Service-Authentication.md)
- [2. Bidirectional-Communications](2-Bidirectional-Communication.md)
- [3. Peer-to-Peer-Signaling](3-Peer-to-Peer-Signaling.md)
- [4. Fido-Extension](4-Fido-Extension.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:lg-opcode-budget.md:
--------------------------------------------------------------------------------

```markdown
# Opcode budgets

Algorand Python provides a helper method for increasing the [available opcode budget](https://developer.algorand.org/docs/get-details/dapps/avm/teal/#dynamic-operational-cost-of-teal-opcodes), see [`algopy.ensure_budget`](#algopy.ensure_budget).

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algo-http-client-with-retry

# Module: types/algo-http-client-with-retry

## Table of contents

### Classes

- [AlgoHttpClientWithRetry](../classes/types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_interface.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algorand-client-interface

# Module: types/algorand-client-interface

## Table of contents

### Interfaces

- [AlgorandClientInterface](../interfaces/types_algorand_client_interface.AlgorandClientInterface.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:python:examples:README.md:
--------------------------------------------------------------------------------

```markdown
Algorand Python SDK Examples
----------------------------

This directory contains examples of how to use the Algorand Python SDK. 

Assuming a sandboxed node is running locally, any example can be run with the following command:

```sh
    python3 <example_name>.py
```


```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:ABIContractNetworkInfo.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / ABIContractNetworkInfo

# Interface: ABIContractNetworkInfo

## Table of contents

### Properties

- [appID](ABIContractNetworkInfo.md#appid)

## Properties

### appID

• **appID**: `number`

#### Defined in

abi/contract.ts:5

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_logic_error.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/logic-error

# Module: types/logic-error

## Table of contents

### Classes

- [LogicError](../classes/types_logic_error.LogicError.md)

### Interfaces

- [LogicErrorDetails](../interfaces/types_logic_error.LogicErrorDetails.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algorand-client-transaction-sender

# Module: types/algorand-client-transaction-sender

## Table of contents

### Classes

- [AlgorandClientTransactionSender](../classes/types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:diagcfg:diagcfg.md:
--------------------------------------------------------------------------------

```markdown
title: diagcfg
---
## diagcfg







```

diagcfg [flags]

```



### Options



```

  -h, --help   help for diagcfg

```



### SEE ALSO



* [diagcfg metric](../metric/metric/)	 - Control and manage Algorand metrics
* [diagcfg telemetry](../telemetry/telemetry/)	 - Control and manage Algorand logging




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/algorand-client-transaction-creator

# Module: types/algorand-client-transaction-creator

## Table of contents

### Classes

- [AlgorandClientTransactionCreator](../classes/types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:KMDTokenHeader.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / KMDTokenHeader

# Interface: KMDTokenHeader

## Table of contents

### Properties

- [X-KMD-API-Token](KMDTokenHeader.md#x-kmd-api-token)

## Properties

### X-KMD-API-Token

• **X-KMD-API-Token**: `string`

#### Defined in

client/urlTokenBaseHTTPClient.ts:18

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:examples_amm_README.md:
--------------------------------------------------------------------------------

```markdown
This is an example implementation of an AMM in TEALScript. The TEALScript-generated contract is not yet tested, but serves to provide a comparison of the Beaker implementation vs TEALScript.

Original source: https://github.com/algorandfoundation/beaker/blob/931cd25e17454874b9d23b481d0db4df9fd802b7/examples/amm/amm.py
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:AlgodTokenHeader.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / AlgodTokenHeader

# Interface: AlgodTokenHeader

## Table of contents

### Properties

- [X-Algo-API-Token](AlgodTokenHeader.md#x-algo-api-token)

## Properties

### X-Algo-API-Token

• **X-Algo-API-Token**: `string`

#### Defined in

client/urlTokenBaseHTTPClient.ts:10

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:algokey:part:info.md:
--------------------------------------------------------------------------------

```markdown
title: algokey part info
---
## algokey part info



Print participation key information



```

algokey part info [flags]

```



### Options



```

  -h, --help             help for info

      --keyfile string   Participation key filename

```



### SEE ALSO



* [algokey part](../../part/part/)	 - Manage participation keys




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:IndexerTokenHeader.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / IndexerTokenHeader

# Interface: IndexerTokenHeader

## Table of contents

### Properties

- [X-Indexer-API-Token](IndexerTokenHeader.md#x-indexer-api-token)

## Properties

### X-Indexer-API-Token

• **X-Indexer-API-Token**: `string`

#### Defined in

client/urlTokenBaseHTTPClient.ts:14

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:avm:teal:opcodes:index.md:
--------------------------------------------------------------------------------

```markdown
title: Opcodes By Version

This page lists the TEAL opcodes by version. For more information on TEAL, see the [TEAL specification](../specification/).

Opcodes by version:

- [v10 - Current version on Mainnet](v10.md)
- [v9](v9.md)
- [v8](v8.md)
- [v7](v7.md)
- [v6](v6.md)
- [v5](v5.md)
- [v4](v4.md)
- [v3](v3.md)
- [v2](v2.md)
- [v1](v1.md)

```

--------------------------------------------------------------------------------
/packages/server/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "src",
    "baseUrl": ".",
    "moduleResolution": "Node",
    "allowJs": true,
    "declaration": true,
    "paths": {
      "*": ["src/*"]
    }
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist", "tests", "**/*.test.ts"]
}

```

--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ESNext",
    "moduleResolution": "Node",
    "declaration": true,
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "allowJs": true
  },
  "exclude": ["node_modules", "dist"]
}

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:assets:arc-0062:README.md:
--------------------------------------------------------------------------------

```markdown
# ARC-62 Reference Implementation

This is the reference implementation of ASA Circulating Supply App based on the
[ARC-62 specification](../../ARCs/arc-0062.md).

## Example

Install the project Python dependencies:

`poetry install`

Run the test:

```shell
poetry run pytest -s -v tests/test_get_circulating_supply.py::test_pass_get_circulating_supply
``` 

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:tutorials_Hello World_0001-intro.md:
--------------------------------------------------------------------------------

```markdown
---
title: 1. Intro and Prerequisites
---

This tutorial will go over the basics of how to use Algokit to initialize a TEALScript project and modify it to create and test a hello world contract.

## Prerequisites 

Before beginning, make sure you have Algokit installed. Go [here](https://developer.algorand.org/docs/get-started/algokit/) for a quick start guide. 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:algokey:generate.md:
--------------------------------------------------------------------------------

```markdown
title: algokey generate
---
## algokey generate



Generate key



```

algokey generate [flags]

```



### Options



```

  -h, --help                help for generate

  -f, --keyfile string      Private key filename

  -p, --pubkeyfile string   Public key filename

```



### SEE ALSO



* [algokey](../../algokey/algokey/)	 - CLI for managing Algorand keys




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:algokey:import.md:
--------------------------------------------------------------------------------

```markdown
title: algokey import
---
## algokey import



Import key file from mnemonic



```

algokey import [flags]

```



### Options



```

  -h, --help              help for import

  -f, --keyfile string    Private key filename

  -m, --mnemonic string   Private key mnemonic

```



### SEE ALSO



* [algokey](../../algokey/algokey/)	 - CLI for managing Algorand keys




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:docs:clients:android:provider-service:authenticate.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Android 14: Authenticate"
---

```kotlin
// MainActivity.kt
val request = PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
if (request.callingRequest is CreatePublicKeyCredentialRequest) {
    val result = viewModel.processCreatePasskey(this@CreatePasskeyActivity, request)
} else {
   val text = resources.getString(R.string.get_passkey_error)
}
```

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:algorand-networks:mainnet.md:
--------------------------------------------------------------------------------

```markdown
title: MainNet

# Version
`v3.27.0-stable`

# Release Version
https://github.com/algorand/go-algorand/releases/tag/v3.27.0-stable

# Genesis ID
`mainnet-v1.0`

# Genesis Hash
`wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=`

# FeeSink Address
`Y76M3MSY6DKBRHBL7C3NNDXGS5IIMQVQVUAB6MP4XEMMGVF2QWNPL226CA`

# RewardsPool Address
`737777777777777777777777777777777777777777777777777UFEJ2CI`

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_asset_manager.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/asset-manager

# Module: types/asset-manager

## Table of contents

### Classes

- [AssetManager](../classes/types_asset_manager.AssetManager.md)

### Interfaces

- [AssetInformation](../interfaces/types_asset_manager.AssetInformation.md)
- [BulkAssetOptInOutResult](../interfaces/types_asset_manager.BulkAssetOptInOutResult.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:ABIMethodReturnParams.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / ABIMethodReturnParams

# Interface: ABIMethodReturnParams

## Table of contents

### Properties

- [desc](ABIMethodReturnParams.md#desc)
- [type](ABIMethodReturnParams.md#type)

## Properties

### desc

• `Optional` **desc**: `string`

#### Defined in

abi/method.ts:57

___

### type

• **type**: `string`

#### Defined in

abi/method.ts:56

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:algokey:part:reparent.md:
--------------------------------------------------------------------------------

```markdown
title: algokey part reparent
---
## algokey part reparent



Change parent address of participation key



```

algokey part reparent [flags]

```



### Options



```

  -h, --help             help for reparent

      --keyfile string   Participation key filename

      --parent string    Address of parent account

```



### SEE ALSO



* [algokey part](../../part/part/)	 - Manage participation keys




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_asset.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / types/asset

# Module: types/asset

## Table of contents

### Interfaces

- [AssetBulkOptInOutParams](../interfaces/types_asset.AssetBulkOptInOutParams.md)
- [AssetOptInParams](../interfaces/types_asset.AssetOptInParams.md)
- [AssetOptOutParams](../interfaces/types_asset.AssetOptOutParams.md)
- [CreateAssetParams](../interfaces/types_asset.CreateAssetParams.md)

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:goal:node:stop.md:
--------------------------------------------------------------------------------

```markdown
title: goal node stop
---
## goal node stop



Stop the specified Algorand node



```

goal node stop [flags]

```



### Options



```

  -h, --help   help for stop

```



### Options inherited from parent commands



```

  -d, --datadir stringArray   Data directory for the node

  -k, --kmddir string         Data directory for kmd

```



### SEE ALSO



* [goal node](../../node/node/)	 - Manage a specified algorand node




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:Address.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / Address

# Interface: Address

Decoded Algorand address. Includes public key and checksum.

## Table of contents

### Properties

- [checksum](Address.md#checksum)
- [publicKey](Address.md#publickey)

## Properties

### checksum

• **checksum**: `Uint8Array`

#### Defined in

types/address.ts:6

___

### publicKey

• **publicKey**: `Uint8Array`

#### Defined in

types/address.ts:5

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_app.AppState.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / [types/app](../modules/types_app.md) / AppState

# Interface: AppState

[types/app](../modules/types_app.md).AppState

Object holding app state values

## Indexable

▪ [key: `string`]: \{ `keyBase64`: `string` ; `keyRaw`: `Uint8Array` ; `value`: `bigint`  } \| \{ `keyBase64`: `string` ; `keyRaw`: `Uint8Array` ; `value`: `string` ; `valueBase64`: `string` ; `valueRaw`: `Uint8Array`  }

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:conduit:list:exporters.md:
--------------------------------------------------------------------------------

```markdown
title: conduit list exporters
---
## conduit list exporters



Usage details for exporter plugins.



### Synopsis



Usage details for exporter plugins. Pass in a specific plugin as a positional argument for a sample configuration file.



```

conduit list exporters [flags]

```



### Options



```

  -h, --help   help for exporters

```



### SEE ALSO



* [conduit list](../../list/list/)	 - List all available Conduit plugins




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:conduit:list:importers.md:
--------------------------------------------------------------------------------

```markdown
title: conduit list importers
---
## conduit list importers



Usage details for importer plugins.



### Synopsis



Usage details for importer plugins. Pass in a specific plugin as a positional argument for a sample configuration file.



```

conduit list importers [flags]

```



### Options



```

  -h, --help   help for importers

```



### SEE ALSO



* [conduit list](../../list/list/)	 - List all available Conduit plugins




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:BaseHTTPClientError.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / BaseHTTPClientError

# Interface: BaseHTTPClientError

BaseHTTPClientError is the interface that errors thrown
by methods of BaseHTTPClient should be using

## Table of contents

### Properties

- [response](BaseHTTPClientError.md#response)

## Properties

### response

• **response**: [`BaseHTTPClientResponse`](BaseHTTPClientResponse.md)

#### Defined in

client/baseHTTPClient.ts:17

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:conduit:list:processors.md:
--------------------------------------------------------------------------------

```markdown
title: conduit list processors
---
## conduit list processors



Usage details for processor plugins.



### Synopsis



Usage details for processor plugins. Pass in a specific plugin as a positional argument for a sample configuration file.



```

conduit list processors [flags]

```



### Options



```

  -h, --help   help for processors

```



### SEE ALSO



* [conduit list](../../list/list/)	 - List all available Conduit plugins




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:EncodedBoxReference.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / EncodedBoxReference

# Interface: EncodedBoxReference

## Table of contents

### Properties

- [i](EncodedBoxReference.md#i)
- [n](EncodedBoxReference.md#n)

## Properties

### i

• **i**: `number`

index of the app ID in the foreign apps array

#### Defined in

types/transactions/encoded.ts:92

___

### n

• **n**: `Uint8Array`

box name

#### Defined in

types/transactions/encoded.ts:97

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:goal:report.md:
--------------------------------------------------------------------------------

```markdown
title: goal report
---
## goal report







### Synopsis



Produces report helpful for debugging.



```

goal report [flags]

```



### Options



```

  -h, --help   help for report

```



### Options inherited from parent commands



```

  -d, --datadir stringArray   Data directory for the node

  -k, --kmddir string         Data directory for kmd

```



### SEE ALSO



* [goal](../../goal/goal/)	 - CLI for interacting with Algorand




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md:
--------------------------------------------------------------------------------

```markdown
[@algorandfoundation/algokit-utils](../README.md) / [types/app](../modules/types_app.md) / TealTemplateParams

# Interface: TealTemplateParams

[types/app](../modules/types_app.md).TealTemplateParams

Dictionary of deploy-time parameters to replace in a teal template.

Note: Looks for `TMPL_{parameter}` for template replacements i.e. you can leave out the `TMPL_`.

## Indexable

▪ [key: `string`]: `string` \| `bigint` \| `number` \| `Uint8Array`

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:EncodedLocalStateSchema.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / EncodedLocalStateSchema

# Interface: EncodedLocalStateSchema

## Table of contents

### Properties

- [nbs](EncodedLocalStateSchema.md#nbs)
- [nui](EncodedLocalStateSchema.md#nui)

## Properties

### nbs

• **nbs**: `number`

appLocalByteSlices

#### Defined in

types/transactions/encoded.ts:73

___

### nui

• **nui**: `number`

appLocalInts

#### Defined in

types/transactions/encoded.ts:68

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:EncodedSubsig.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / EncodedSubsig

# Interface: EncodedSubsig

## Table of contents

### Properties

- [pk](EncodedSubsig.md#pk)
- [s](EncodedSubsig.md#s)

## Properties

### pk

• **pk**: `Uint8Array`

The public key

#### Defined in

types/transactions/encoded.ts:339

___

### s

• `Optional` **s**: `Uint8Array`

The signature provided by the public key, if any

#### Defined in

types/transactions/encoded.ts:344

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:diagcfg:metric:status.md:
--------------------------------------------------------------------------------

```markdown
title: diagcfg metric status
---
## diagcfg metric status



Print the node's metric status



### Synopsis



Print the node's metric status



```

diagcfg metric status -d dataDir [flags]

```



### Options



```

  -h, --help   help for status

```



### Options inherited from parent commands



```

  -d, --dataDir string   Data directory

```



### SEE ALSO



* [diagcfg metric](../../metric/metric/)	 - Control and manage Algorand metrics




```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:interfaces:EncodedGlobalStateSchema.md:
--------------------------------------------------------------------------------

```markdown
[algosdk](../README.md) / [Exports](../modules.md) / EncodedGlobalStateSchema

# Interface: EncodedGlobalStateSchema

## Table of contents

### Properties

- [nbs](EncodedGlobalStateSchema.md#nbs)
- [nui](EncodedGlobalStateSchema.md#nui)

## Properties

### nbs

• **nbs**: `number`

appGlobalByteSlices

#### Defined in

types/transactions/encoded.ts:85

___

### nui

• **nui**: `number`

appGlobalInts

#### Defined in

types/transactions/encoded.ts:80

```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:clis:diagcfg:metric:enable.md:
--------------------------------------------------------------------------------

```markdown
title: diagcfg metric enable
---
## diagcfg metric enable



Enable metric collection on node



### Synopsis



Enable metric collection on node



```

diagcfg metric enable -d dataDir [flags]

```



### Options



```

  -h, --help   help for enable

```



### Options inherited from parent commands



```

  -d, --dataDir string   Data directory

```



### SEE ALSO



* [diagcfg metric](../../metric/metric/)	 - Control and manage Algorand metrics




```
Page 1/74FirstPrevNextLast