Skip to main content

Device Inventory

Monad uses the cron field to run this input on specific intervals and returns all devices' details, performing a full sync of data each time.

Sync Type: Full Synchronisation

Requirements

  • Before you connect Monad to Tailscale, you need access to your Tailscale account.
  • This connection requires an OAuth Client to be created.
  • Instructions Here.
    • Open the OAuth clients page of the admin console.
    • In the Generate OAuth client page, Select devices:core:read scope.
    • Select Generate client.
    • In the Generated new OAuth client page, you can see the new OAuth client's ID and secret. Copy both the client ID and secret, as you need them to create the input in Monad. Note that after you close the Generated new OAuth client page, you won't be able to copy the secret again.
    • Select Done.
  • Your OAuth client is now configured. Use the client ID and secret when you configure your Monad input.
  • You can view your Organization name in the Settings page of the admin console. Leave the field blank if you want devices from default organization.

Details

Monad uses the cron field to run this input on specific intervals and returns all devices' details, performing a full sync of data each time.

Configuration

The following configuration defines the input parameters. Each field's specifications, such as type, requirements, and descriptions, are detailed below.

Settings

SettingTypeRequiredDescription
Tailscale Organization IDstringYesYour Tailscale Organization Name.
Field OptionstringYesDefault return all fields except: enabledRoutes, advertisedRoutes, clientConnectivity
CronstringYesA cron expression defining how often to fetch user data.

Secrets

SecretTypeRequiredDescription
Client IDstringYesYour Tailscale oauth Client ID.
Client SecretstringYesYour Tailscale oauth Client Secret.

Custom Schema Handling

If the source data doesn't align with any of the OpenSecurityControlFramework (OSCF) schemas, you can create a custom transformation using our JQ transform pipeline. For example:

{
metadata: {
schema_version: "1.0.0",
custom_framework: "my_framework"
},
controls: .[]
}

For more information on JQ and how to write your own JQ transformations see the JQ docs here.

If you believe this data source should be included in the standard OSCF schema set, please reach out to our team at support@monad.com. We're always looking to expand our coverage of security control frameworks based on community needs.

Sample Record

{
"addresses": [
"10.77.49.81",
"fd7a:115c:a1e0::cd01:671b"
],
"id": "327339287115191",
"nodeId": "sample-node-id",
"user": "",
"name": "Supercomputer.nulla.ts.net",
"hostname": "Smartphone.adipiscing",
"clientVersion": "1.58.2-tb0e1bbb62",
"updateAvailable": "true",
"os": "linux",
"created": "2025-08-11T23:46:52Z",
"lastSeen": "2025-08-11T23:46:52Z",
"keyExpiryDisabled": "true",
"expires": "2025-08-11T23:46:52Z",
"authorized": "false",
"isExternal": "false",
"machineKey": "mkey:sample_hash",
"nodeKey": "nodekey:sample_hash",
"tailnetLockKey": "nlpub:sample_hash",
"blocksIncomingConnections": "true",
"enabledRoutes": [],
"advertisedRoutes": [],
"clientConnectivity": {
"endpoints": [
"71.34.176.201:3729",
"[2600:1700:51c0:bdaf:5c4d:944a:6e78:1abe]:51831",
"10.70.29.120:46545"
],
"mappingVariesByDestIP": true,
"latency": {},
"clientSupports": {
"hairPinning": null,
"ipv6": true,
"pcp": false,
"pmp": false,
"udp": true,
"upnp": false
}
},
"tags": [
"tag:Tablet"
]
}