Tools & Connectors
Cloud & Observability
Datadog, Sentry, PagerDuty, New Relic, Splunk, Grafana, and other ops toolsets.
#Cloud & observability
Toolsets for telemetry pipelines, incident response, on-call, and
infrastructure control planes. Every connector follows the standard@toolset / @toolify shape.
#Agent-ready behavior (overview)
All list / search tools in this group return compact summaries by
default with a stable _ref field (log_ref, monitor_ref,dashboard_ref, issue_ref, incident_ref, service_ref,schedule_ref, oncall_ref, user_ref, alert_ref, app_ref,index_ref, search_ref, folder_ref, component_ref,subscriber_ref, zone_ref, record_ref, worker_ref,bucket_ref, pod_ref, namespace_ref, deployment_ref).
Raw provider IDs are hidden unless you passinclude_ids=True. Where the tool exposes include_metadata=False,
that returns the raw provider response untouched. Default page size is
25; some tools cap absolute limits to provider maxima (1000 logs, 100
users, etc.).
Write tools that take an identifier accept either a raw ID/UID/int or
the dict from the corresponding list/get tool. This includesget_monitor, delete_monitor, mute_monitor, get_issue,update_issue, delete_issue, list_events_for_issue,get_incident, update_incident, acknowledge_incident,delete_alert_policy, get_dashboard_by_uid,delete_dashboard_by_uid, update_component, update_incident,delete_incident, get_zone, list_dns_records, update_dns_record,delete_dns_record, purge_cache.
Destructive tools across this group (require user confirmation):delete_monitor, delete_issue, cancel_search_job,delete_alert_policy, delete_dashboard_by_uid, delete_incident,delete_dns_record, purge_cache, delete_pod.
#DatadogToolSet
from maivn_tools import DatadogToolSet connector = DatadogToolSet( api_key=secrets["DD_API_KEY"], app_key=secrets["DD_APP_KEY"], # required for most read APIs site="datadoghq.com",)Tools: search_logs, submit_logs, query_metrics, submit_metrics,list_monitors, get_monitor, create_monitor, delete_monitor
(destructive), mute_monitor, post_event, list_dashboards,get_dashboard.
Agent-ready behavior
search_logs(default limit 25, hard max 1000; summaries capped at
25): summary withlog_ref,timestamp,service,status,host,message, optionaltags. Raw Datadog event IDs hidden
unlessinclude_ids=True; passinclude_metadata=Falsefor the raw
provider response. Cursor pagination preserved asnext_cursor.list_monitors(default page size 25): summary withmonitor_ref,name,type,state,message,tags. Numeric IDs hidden by
default; opt in withinclude_ids=True(needed forget_monitor,delete_monitor,mute_monitor).list_dashboards: summary withdashboard_ref,title,description,layout_type,url. Opt in withinclude_ids=True
fordashboard_id(needed forget_dashboard).- Tolerant inputs:
get_monitor,delete_monitor, andmute_monitor
accept an int, a monitor dict, or a list of such. - Destructive:
delete_monitor. Confirm before invoking.
hot = connector.search_logs( query="status:error service:checkout", from_time="now-15m", to_time="now",)#SentryToolSet
from maivn_tools import SentryToolSet connector = SentryToolSet(auth_token=secrets["SENTRY_TOKEN"])Tools: list_organizations, list_projects, get_project,list_issues, get_issue, update_issue, delete_issue
(destructive), list_events_for_issue, list_releases,create_release, list_alert_rules.
Agent-ready behavior
list_issues(default limit 25, hard max 100; summaries capped at
25): summary withissue_ref,title,culprit,status,level,count,last_seen,permalink. Raw Sentry issue IDs
hidden; opt in withinclude_ids=True(needed forget_issue,update_issue,delete_issue).include_metadata=Falsereturns
the raw provider payload.list_alert_rules: summary withalert_ref,name,environment,frequency,conditions_count,actions_count. Opt in foralert_id.- Tolerant inputs:
get_issue,update_issue,delete_issue, andlist_events_for_issueaccept a string ID, an issue dict, or a
list of issue dicts. - Destructive:
delete_issue. Confirm before invoking.
#PagerDutyToolSet
from maivn_tools import PagerDutyToolSet connector = PagerDutyToolSet( api_key=secrets["PD_TOKEN"], from_email="oncall@example.com", # required for ack / resolve writes events_routing_key=secrets["PD_RK"], # required for Events v2 trigger / resolve)REST + Events v2 in one toolset. Tools: list_incidents, get_incident,update_incident, acknowledge_incident, create_incident,trigger_event, resolve_event, list_services, list_schedules,list_on_calls, list_users.
Agent-ready behavior
list_incidents(default limit 25, hard max 200; summaries capped
at 25): summary withincident_ref,incident_number,title,status,urgency,created_at,service_name. Raw incident IDs
hidden; opt in withinclude_ids=Trueforincident_id(needed
forget_incident,update_incident).list_services(default 25): summary withservice_ref,name,description,status. Opt in forservice_id(needed bycreate_incident).list_schedules(default 25): summary withschedule_ref,name,description,time_zone. Opt in forschedule_id(needed bylist_on_calls(schedule_ids=...)).list_on_calls: summary withoncall_ref,user_name,escalation_level,schedule_name,start,end. Opt in foruser_id/schedule_id. Best for "who is on call?" questions.list_users(default 25): summary withuser_ref,name,email,role,time_zone. Opt in foruser_id.- Tolerant inputs:
get_incident,update_incident, andacknowledge_incidentaccept a string ID, an incident dict, or a
list of such. - No destructive tools -- incident deletion is intentionally not
exposed (useupdate_incident(status="resolved")instead).
hot = connector.list_incidents(statuses=["triggered", "acknowledged"])connector.acknowledge_incident(hot["incidents"][0]) # dict accepted#NewRelicToolSet
from maivn_tools import NewRelicToolSet connector = NewRelicToolSet( api_key=secrets["NEW_RELIC_USER_KEY"], account_id=int(secrets["NEW_RELIC_ACCOUNT_ID"]), ingest_license_key=secrets.get("NEW_RELIC_LICENSE_KEY"), region="US",)NerdGraph + REST + Insights ingest. submit_logs / submit_metrics
require ingest_license_key. Tools: nerdgraph_query, nrql_query,submit_logs, submit_metrics, list_alert_policies,create_alert_policy, delete_alert_policy (destructive),list_applications.
Agent-ready behavior
list_alert_policies: summary withalert_ref,name,incident_preference,created_at. Raw numeric policy IDs hidden;
opt in withinclude_ids=Trueforpolicy_id(needed bydelete_alert_policy).include_metadata=Falsereturns the raw
response.list_applications: summary withapp_ref,name,language,health_status,reporting. Opt in forapplication_id.- Tolerant inputs:
delete_alert_policyaccepts an int, a policy
dict, or a list of such. - Destructive:
delete_alert_policy. Confirm before invoking.
#SplunkToolSet
from maivn_tools import SplunkToolSet connector = SplunkToolSet( token=secrets["SPLUNK_TOKEN"], base_url="https://splunk.example.com:8089",)REST API for the splunkd management port. Tools: create_search_job,get_search_job, get_search_results, cancel_search_job
(destructive), list_indexes, list_saved_searches,create_saved_search, update_saved_search.
Agent-ready behavior
list_indexes: summary withindex_ref,name,total_event_count,current_db_size_mb,disabled(capped at
25).include_metadata=Falsereturns the raw response.list_saved_searches: summary withsearch_ref,name,search,is_scheduled,cron_schedule(capped at 25). Saved-search names
are user-facing and are kept (they are also the API key used byupdate_saved_search).- Destructive:
cancel_search_job. Confirm before invoking (results
are unrecoverable once cancelled).
#GrafanaToolSet
from maivn_tools import GrafanaToolSet connector = GrafanaToolSet( api_key=secrets["GRAFANA_TOKEN"], # service-account or API key base_url="https://stack.grafana.net",)Tools: search_dashboards, get_dashboard_by_uid,create_or_update_dashboard, delete_dashboard_by_uid (destructive),list_folders, create_folder, list_datasources,create_annotation, list_alert_rules, get_health.
Agent-ready behavior
search_dashboards(default limit 25, hard max 5000; summaries
capped at 25): summary withdashboard_ref,title,type,url,folder_title,tags. Dashboard UIDs hidden; opt in withinclude_ids=Truefordashboard_uid/dashboard_id(needed byget_dashboard_by_uid,delete_dashboard_by_uid).list_folders(default limit 25): summary withfolder_ref,title,parent_uid. Opt in forfolder_uid/folder_id.list_alert_rules: summary withalert_ref,title,folder_uid,rule_group,condition,no_data_state,exec_err_state. Opt in
foralert_uid.- Tolerant inputs:
get_dashboard_by_uidanddelete_dashboard_by_uidaccept a UID string or a dashboard dict
fromsearch_dashboards(include_ids=True). - Destructive:
delete_dashboard_by_uid. Confirm before invoking.
#StatuspageToolSet
from maivn_tools import StatuspageToolSet connector = StatuspageToolSet( api_key=secrets["STATUSPAGE_KEY"], page_id="my-page-id",)Tools: get_page, list_components, update_component,list_incidents, create_incident, update_incident,delete_incident (destructive), schedule_maintenance,list_subscribers.
Agent-ready behavior
list_components: summary withcomponent_ref,name,status,description,group_id. Raw component IDs hidden; opt in withinclude_ids=Trueforcomponent_id(needed byupdate_component).list_incidents(default per_page 25, hard max 100; summaries
capped at 25): summary withincident_ref,name,status,impact,created_at,resolved_at,shortlink. Opt in forincident_id(needed byupdate_incident,delete_incident).list_subscribers(default 25): summary withsubscriber_ref,mode,email,phone_number,endpoint,quarantined_at. Opt
in forsubscriber_id.- Tolerant inputs:
update_component,update_incident, anddelete_incidentaccept a string ID or a resource dict. - Destructive:
delete_incident. Confirm before invoking.
#CloudflareToolSet
from maivn_tools import CloudflareToolSet connector = CloudflareToolSet(api_token=secrets["CLOUDFLARE_TOKEN"])v4 REST API. Tools: verify_token, list_zones, get_zone,list_dns_records, create_dns_record, update_dns_record,delete_dns_record (destructive), purge_cache (destructive),list_workers, list_r2_buckets, create_r2_bucket.
Agent-ready behavior
list_zones(default per_page 25, hard max 50): summary withzone_ref,name,status,plan. Zone IDs hidden; opt in withinclude_ids=Trueforzone_id(needed forlist_dns_records,purge_cache, etc.).list_dns_records(default per_page 25, hard max 100): summary withrecord_ref,type,name,content,ttl,proxied. Opt in
forrecord_id(needed forupdate_dns_record,delete_dns_record).list_workers: summary withworker_ref,name,created_on,modified_on,etag. Opt in forscript_id.list_r2_buckets: summary withbucket_ref,name,creation_date,location. Bucket names are the primary identifier
in R2 so noinclude_idsflag is needed.- Tolerant inputs:
get_zone,list_dns_records,update_dns_record,delete_dns_record, andpurge_cacheaccept
a string ID or a resource dict from the corresponding list call. - Destructive:
delete_dns_record,purge_cache. Confirm before
invoking (purge causes user-facing latency until cache repopulates).
#KubernetesToolSet
from maivn_tools import KubernetesToolSet connector = KubernetesToolSet( api_server="https://my-cluster:6443", token=secrets["K8S_SA_TOKEN"],)Talks to the Kubernetes API server directly. Tools: get_version,list_namespaces, list_pods, get_pod, get_pod_logs,list_deployments, scale_deployment, delete_pod (destructive),list_services, list_events, list_nodes, apply_manifest.
Agent-ready behavior
list_namespaces: summary withnamespace_ref,name,phase,created_at. Namespacenameis the user-facing identifier and is
kept; cluster UID is opt-in viainclude_ids=True.list_pods(default limit 25, hard max 1000; summaries capped at
25): summary withpod_ref,name,namespace,phase,ready,node,start_time. Pod UIDs are opt-in.list_deployments: summary withdeployment_ref,name,namespace,replicas,ready_replicas,available_replicas.
UIDs opt-in.list_services: summary withservice_ref,name,namespace,type,cluster_ip,ports. UIDs opt-in.list_eventsreturns the raw event list (already useful for
diagnosing Pending/Failed pods); cap withlimit(default 25, hard
max 1000).- Destructive:
delete_pod. Confirm before invoking (one-off pods
are not respawned).
apply_manifestuses server-side apply
(Content-Type: application/apply-patch+yaml+fieldManager) so the
caller can ship arbitrary resources without crafting per-kind tooling.