Tools & Connectors
Identity & Security
Auth0, Okta, Vault, 1Password, Bitwarden, Snyk, Twilio, and other identity toolsets.
#Identity & security
Connectors for identity providers, secret managers, MFA, and security
scanners. Every connector follows the standard @toolset / @toolify
shape and the agent-ready toolset pattern (compact summaries by default,
opt-in raw IDs, tolerant write inputs) — and secret values are never
returned in list/summary mode (see below).
#Agent-ready behavior (overview)
This category covers identity (Auth0, Okta, JumpCloud, OneLogin, Duo),
secret managers (Vault, 1Password, Bitwarden, Doppler, Infisical),
security scanning (Snyk), and verification (Twilio). Across the group:
- List tools return compact summaries with stable display refs
(user_ref,role_ref,connection_ref,app_ref,org_ref,vault_ref,item_ref,secret_ref,project_ref,config_ref,system_ref,group_ref,vuln_ref,message_ref,subscriber_ref). Raw provider IDs (user_id,role_id,vault_id,item_id,secret_id,org_id,policy_arn,connection_id,client_id,org_slug/project_slug,workspace_id, etc.) are hidden by default and opt-in viainclude_ids=True. - Write tools that take an identifier accept either a raw ID/email
or the dict from the corresponding list/get tool (Auth0:_resolve_user_id; Okta:_resolve_user_id; OnePassword:_resolve_vault_id/_resolve_item_id; Bitwarden: project and
secret resolvers; JumpCloud:_resolve_user_id; OneLogin user
resolver; Snyk: org/project string ids; Twilio: SID strings). - Default page size is generally 25; some tools cap at provider
maxima (Auth0 / Okta / JumpCloud / OneLogin: 100-200; Twilio:
1000).
#Secret values are NEVER returned in list/summary mode
For every secret-store toolset (Vault, 1Password, Bitwarden, Doppler,
Infisical), the list tools (kv_list, list_items,list_secrets) return metadata only -- keys, names, comments, types,
timestamps -- never the secret value itself. Even when the underlying
provider response carries the value, the summary stripper drops it.
Two opt-in paths exist for cases where the agent really does need the
values:
DopplerToolSet.list_secrets(..., include_values=True)-- returns
the raw Doppler payload (with values) for the requested config.InfisicalToolSet.list_secrets(..., include_values=True)-- returns
the raw Infisical payload (with values) for the requested
workspace/environment/path.
Use either flag only when the agent's task is "fetch all the secrets
and pass them to X." Treat the result as sensitive and do not echo it
into a final user-facing answer.
For one-off reads, prefer the targeted get_secret/kv_get/get_item
tool -- they read a single value at a time and make the access pattern
explicit. They still return the value (that is the point of the
tool), so the same sensitivity rule applies.
#Destructive tools (require user confirmation)
Identity: delete_user (Auth0, JumpCloud, OneLogin, Duo),suspend_user / deactivate_user (Okta), lock_user (OneLogin),disable_user (Duo), remove_user_from_group (Okta).
Secrets: kv_delete, kv_destroy (Vault), delete_item
(1Password), delete_projects, delete_secrets (Bitwarden),delete_project (Doppler), delete_secret (Infisical).
Security / messaging: deactivate_project (Snyk), send_message,start_verification, make_call (Twilio -- call out separately:
these trigger real billable messages / calls to real phone numbers
and emails. Confirm the recipient and body with the user before
invoking).
#Auth0ToolSet
from maivn_tools import Auth0ToolSet connector = Auth0ToolSet( domain="tenant.us.auth0.com", access_token=secrets["AUTH0_MGMT_TOKEN"],)Tools: list_users, get_user, create_user, update_user,delete_user (destructive), list_roles, assign_roles_to_user,list_connections, list_clients, list_organizations, list_logs.
Agent-ready behavior
list_users(defaultper_page=25, hard max 100): summary withuser_ref,email,name,blocked,email_verified,last_login,logins_count. Rawuser_idhidden; opt in withinclude_ids=True(needed byupdate_user,delete_user,assign_roles_to_user).list_roles: summary withrole_ref,name,description. Opt
in forrole_id(needed byassign_roles_to_user).list_connections: summary withconnection_ref,name,strategy,is_domain_connection.nameis whatcreate_user
takes -- opt in only forconnection_idif you need it.list_clients: summary withapp_ref,name,app_type,is_first_party. Rawclient_idis sensitive and hidden by
default.list_organizations: summary withorg_ref,name,display_name. Opt in fororg_id.- Tolerant inputs:
update_user,delete_user,assign_roles_to_useraccept a rawuser_idstring or a user dict
fromlist_users(include_ids=True).
users = connector.list_users(q='email:"alice@example.com"', include_ids=True)connector.update_user(users["users"][0], blocked=True) # dict accepted#OktaToolSet
from maivn_tools import OktaToolSet connector = OktaToolSet( org_url="https://my-tenant.okta.com", api_token=secrets["OKTA_TOKEN"],)Tools: list_users, get_user, create_user, update_user,suspend_user (destructive), unsuspend_user, deactivate_user
(destructive), list_groups, add_user_to_group,remove_user_from_group (destructive), list_applications,list_factors, list_system_logs.
Agent-ready behavior
list_users(default limit 25, hard max 200): summary withuser_ref,email,name,login,status,last_login. Raw
Oktauser_idhidden; opt in withinclude_ids=True(needed by
write tools).list_groups(default limit 25, hard max 200): summary withgroup_ref,name,description,type. Opt in forgroup_id
(needed byadd_user_to_group/remove_user_from_group).list_applications(default limit 25, hard max 200): summary withapp_ref,name,label,status,sign_on_mode. Opt in forapp_id.- Tolerant inputs:
update_user,suspend_user,unsuspend_user,deactivate_user,add_user_to_group,remove_user_from_group
accept a string ID / login / email or a user dict. - Destructive:
suspend_user,deactivate_user,remove_user_from_group. Confirm before invoking.
#VaultToolSet
from maivn_tools import VaultToolSet connector = VaultToolSet( base_url="https://vault.example:8200", token=secrets["VAULT_TOKEN"], namespace="org/team", # optional enterprise namespace)KV v2 + transit + token operations. Tools: get_health, list_mounts,kv_get, kv_put, kv_patch, kv_delete (destructive), kv_destroy
(destructive), kv_list, lookup_token_self, renew_token_self,transit_encrypt, transit_decrypt.
Agent-ready behavior
kv_list: summary withsecret_ref,key,is_directory. Never
returns secret values -- only child key names. Setinclude_ids=Trueto also attach the fullpathfor each key
(handy for follow-upkv_getcalls).kv_getreturns Vault's raw payload withdata.data(the actual
secret material) -- treat the result as sensitive.- Destructive:
kv_delete(soft-delete, reversible via undelete) andkv_destroy(permanent). Confirm before invoking.
#OnePasswordToolSet
from maivn_tools import OnePasswordToolSet connector = OnePasswordToolSet( base_url="https://op-connect.example.com", access_token=secrets["OP_CONNECT_TOKEN"],)1Password Connect (self-hosted). Tools: list_vaults, get_vault,list_items, get_item, create_item, update_item, patch_item,delete_item (destructive), get_item_files, get_heartbeat.
Agent-ready behavior
list_vaults: summary withvault_ref,name,description,type,item_count. Rawvault_idhidden; opt in withinclude_ids=True.list_items: summary withitem_ref,title,category,tags,updated_at, optionalprimary_url. Item values are not in the
list response -- even if a value-bearing field leaks in, the
stripper drops it. Useget_itemfor a single item's full payload
(which does include secret fields -- treat as sensitive).- Tolerant inputs:
get_vault,list_items,get_item,create_item,update_item,patch_item,delete_item,get_item_filesaccept the relevant ID string or a vault/item dict. - Destructive:
delete_item. Confirm before invoking (item cannot be
recovered).
#BitwardenToolSet
from maivn_tools import BitwardenToolSet connector = BitwardenToolSet( access_token=secrets["BWS_ACCESS_TOKEN"], organization_id="org-uuid",)Bitwarden Secrets Manager. Tools: list_projects, create_project,get_project, update_project, delete_projects (destructive),list_secrets, get_secret, create_secret, update_secret,delete_secrets (destructive).
Agent-ready behavior
list_projects: summary withproject_ref,name,created_at,revised_at. Rawproject_idhidden; opt in withinclude_ids=True.list_secrets: summary withsecret_ref,key,note,created_at,revised_at. Never returns thevalue. Useget_secretfor a single targeted read (which does include the
value -- treat as sensitive).- Tolerant inputs:
get_project,update_project,delete_projects,get_secret,update_secret,delete_secrets
accept the relevant ID string, a resource dict, or a list of either
(for the bulk delete tools). - Destructive:
delete_projects,delete_secrets. Confirm before
invoking.
#DopplerToolSet
from maivn_tools import DopplerToolSet connector = DopplerToolSet(token=secrets["DOPPLER_TOKEN"])Tools: list_projects, create_project, delete_project
(destructive), list_configs, list_secrets, get_secret,update_secrets, download_secrets.
Agent-ready behavior
list_projects(defaultper_page=20): summary withproject_ref,name,description,created_at. Rawproject_slughidden;
opt in withinclude_ids=True.list_configs: summary withconfig_ref,name,environment,root,locked.list_secrets: summary withsecret_ref,key, optionalvalue_type,note. Never returns secret values unless you passinclude_values=True-- that is the explicit opt-in path for
bulk-reading values; treat the result as sensitive.get_secretanddownload_secretsboth return values; treat as
sensitive.- Destructive:
delete_project(removes the project and all its
configs + secrets). Confirm before invoking.
secrets = connector.list_secrets(project="my-app", config="prd") # metadata onlyvalues = connector.list_secrets(project="my-app", config="prd", include_values=True)#InfisicalToolSet
from maivn_tools import InfisicalToolSet connector = InfisicalToolSet(access_token=secrets["INFISICAL_TOKEN"])Tools: list_projects, get_project, list_secrets, get_secret,create_secret, update_secret, delete_secret (destructive).
Agent-ready behavior
list_projects: summary withproject_ref,name,slug,environments. Rawworkspace_idhidden; opt in withinclude_ids=True.list_secrets: summary withsecret_ref,key,type,comment,updated_at. Never returns secret values unless you
passinclude_values=True-- that is the explicit opt-in path;
treat the result as sensitive. Setinclude_ids=Trueto also
attachsecret_idandsecret_path.get_secretreturns the value; treat as sensitive.- Destructive:
delete_secret. Confirm before invoking.
#SnykToolSet
from maivn_tools import SnykToolSet connector = SnykToolSet(api_token=secrets["SNYK_TOKEN"])Tools: list_organizations, list_projects, get_project,list_issues, list_aggregated_issues, trigger_test,deactivate_project (destructive), list_dependencies.
Agent-ready behavior
list_organizations(default limit 25, hard max 100): summary withorg_ref,name,slug. Opt in fororg_id.list_projects(default limit 25, hard max 100): summary withproject_ref,name,origin,type,target_reference,status. Opt in forproject_id.list_issues(default limit 25, hard max 100): summary withvuln_ref,title,severity,type,status,ignored,created_at. Opt in forvuln_id/key.- Destructive:
deactivate_project(stops scans; reversible via the
Snyk UI). Confirm before invoking.
#TwilioToolSet
from maivn_tools import TwilioToolSet connector = TwilioToolSet( account_sid=secrets["TWILIO_ACCOUNT_SID"], auth_token=secrets["TWILIO_AUTH_TOKEN"],)Programmable Messaging, Verify, and Voice in one toolset. Tools:send_message, list_messages, get_message, start_verification,check_verification, make_call, lookup_phone_number.
Agent-ready behavior
list_messages(defaultpage_size=25, hard max 1000): summary
withmessage_ref,from,to,status,direction,body,date_sent,price. Rawmessage_sidhidden; opt in withinclude_ids=True.- Destructive (real billable side effects):
send_message,start_verification,make_call. Each one sends a real SMS / OTP
/ phone call to a real number -- always confirm the recipient and
content with the user before invoking. Thedestructive=True
marker also makes them filterable viaexclude_tags=["destructive"]
for fully autonomous runs.
#JumpCloudToolSet
from maivn_tools import JumpCloudToolSet connector = JumpCloudToolSet(api_key=secrets["JUMPCLOUD_KEY"])Tools: list_users, get_user, create_user, update_user,delete_user (destructive), list_user_groups,manage_user_group_member, list_systems, list_applications.
Agent-ready behavior
list_users(default limit 25, hard max 100): summary withuser_ref,email,username,name,suspended,activated,last_login. Rawuser_idhidden; opt in withinclude_ids=True.list_user_groups: summary withgroup_ref,name,description,type. Opt in forgroup_id.list_systems: summary withsystem_ref,hostname,os,version,active,last_contact. Opt in forsystem_id.list_applications: summary withapp_ref,name,sso_type,active. Opt in forapp_id.- Tolerant inputs:
update_user,delete_user,manage_user_group_memberaccept a user-id string or a user dict. - Destructive:
delete_user. Confirm before invoking (terminates
sessions and removes group membership).
#OneLoginToolSet
from maivn_tools import OneLoginToolSet connector = OneLoginToolSet( access_token=token, # via OAuth client-credentials subdomain="my-tenant", region="us", # "us" or "eu")Tools: list_users, get_user, create_user, update_user,delete_user (destructive), lock_user (destructive), list_roles,assign_role_to_user, list_apps, list_events.
Agent-ready behavior
list_users: summary withuser_ref,email,username,name,status,last_login,locked_until. Raw numericuser_id
hidden; opt in withinclude_ids=True.list_roles: summary withrole_ref,name(and admin metadata).
Opt in forrole_id.list_apps: summary withapp_ref,name,connector_id.- Destructive:
delete_user,lock_user. Confirm before invoking.
#DuoToolSet
from maivn_tools import DuoToolSet connector = DuoToolSet( ikey=secrets["DUO_IKEY"], skey=secrets["DUO_SKEY"], api_host="api-abc123.duosecurity.com",)The toolset computes the per-request HMAC-SHA512 signature in-process
so callers only provide ikey / skey / api_host. Tools:list_users, get_user, create_user, disable_user (destructive),delete_user (destructive), list_phones, list_groups,associate_group_with_user, list_integrations,list_authentication_logs.
Agent-ready behavior
list_users: summary withuser_ref,username,email,status,last_login. Rawuser_idhidden; opt in withinclude_ids=True.list_phones: summary withphone_ref,number,type,platform,activated. Opt in forphone_id.list_groups: summary withgroup_ref,name,desc,status. Opt in forgroup_id.list_integrations: summary withintegration_ref,name,type,enroll_policy. Opt in forintegration_key.- Destructive:
disable_user,delete_user. Confirm before invoking
(Duo deletes are permanent).