anthropics/tres-settings-management
Manage Organization Settings and Platform Settings via the TRES MCP GraphQL API. Use when users ask about org settings, platform settings, configuration, feature flags, enable/disable platforms, balance diff, commit strategy, cost basis, ERP, pricing, sync boundaries, or any setting read/write operation. Trigger phrases include "get settings", "show settings", "update settings", "change settings", "enable platform", "disable platform", "balance diff", "commit strategy", "cost basis strategy", "set min sync date", "configure", "turn on", "turn off".
npx skills add https://github.com/anthropics/claude-plugins-community --skill tres-settings-management
This skill lets users view and modify configuration for their TRES Finance organization and individual blockchain/exchange platforms. There are two levels:
Before doing anything, confirm which organization the user is connected to:
query { admin { orgName } }
Tell the user: "You're connected to {orgName}."
Before any mutation, ALWAYS fetch the current value of the setting(s) being changed. Show a clear before/after comparison.
Before executing ANY mutation, you MUST:
Flag these settings as potentially dangerous and add a warning:
costBasisStrategy — Changing mid-period can cause recalculations across the entire orgdisableAutoCommit — Stops all automatic data processingskipCostBasis — Disables cost basis entirelycommitStrategy: SKIP_ALL — Fully disables a platform's data pipelineenableMultiEntity — Structural change, hard to reverseallowShort — Enables short positions in cost basisDo NOT rely on hardcoded field lists. Use the MCP introspect tool to discover available fields and their types dynamically:
introspect("OrganizationSettingsObjectType") — all readable org settingsintrospect("setOrganizationSettings") — all writable org settings with descriptionsintrospect("PlatformSettingsObjectType") — all readable platform settingsintrospect("setPlatformSettings") — all writable platform settings with descriptionsWhen a user asks "what can I configure?" or you need to verify a field name or enum values, introspect first.
If the user says "show me the settings" without specifics, offer these categories with plain-language explanations:
| Category | What It Controls |
|---|---|
| Cost Basis | How gains/losses are calculated (FIFO, LIFO, etc.), per-wallet vs org-wide, impairment |
| Commit Pipeline | Automatic data processing schedule, priority, stuck detection, sync hours |
| Internal Transfers | How transfers between the org's own wallets are detected and matched |
| Pricing | Where asset prices come from, stablecoin pegging, swap alignment |
| ERP Integration | How data syncs to accounting systems (NetSuite, Xero, QuickBooks) |
| Dashboard & Features | Which UI features are enabled (pivot tables, vesting, payments, multi-entity) |
| Staking | Staking rewards tracking and position management |
| Reconciliation | Cross-org and subsystem reconciliation behavior |
| Reports | Scheduled report timing, format, and content |
| Platform Collection | Which blockchains/exchanges are enabled, their sync boundaries and filters |
query {
admin {
orgName
organizationSettings {
# include only the fields relevant to the user's question
}
}
}
introspect("OrganizationSettingsObjectType") to discover available fields if neededThese fields return objects/lists, not scalars. Always include their sub-fields:
| Field | Sub-fields | What It Is |
|---|---|---|
| peggedStableCoinsToFiat | assetName, currency | Stablecoins treated as equivalent to fiat |
| pricingApiSourcePerAsset | assetName, pricingApiSource | Custom pricing source per asset |
| netsuiteCurrencySymbolToInternalId | currency, internalId | NetSuite currency mapping |
| simpleMatchingStrategies | beforeRange, afterRange | Reconciliation time windows |
| proofOfFunds | organizationName | Proof of funds client config |
The admin query also provides:
orgName — the organization's display namedisabledPlatforms — quick list of platforms with collection fully disabledauth0Connections — available SSO login methodsUses patch semantics — only include the fields you want to change. Everything else stays as-is.
mutation {
setOrganizationSettings(
costBasisStrategy: FIFO
) {
organizationSettings {
costBasisStrategy
}
}
}
Use introspect("setOrganizationSettings") to discover all mutable fields, their types, and descriptions.
Returns only platforms/accounts with explicit overrides. Platforms using all defaults won't appear.
query {
platformSettings(platform: ETHEREUM) {
results {
settingsId
platform
internalAccountId
platformSettings {
commitStrategy
calculateBalanceDiff
minLastSyncedAt
maxToDate
# add fields as needed — use introspect("PlatformSettingsObjectType") for full list
}
}
}
}
All arguments are optional — combine as needed:
| Argument | Type | Use Case |
|---|---|---|
| platform | Platform | Show settings for a specific chain/exchange |
| internalAccountId | Int | Show settings for a specific wallet |
| settingsId | String | Exact match on storage key |
| settingsId_Icontains | String | Partial match (e.g., "ethereum" matches "ethereum_714128") |
platform only → platform-wide + all per-wallet overrides for that platformplatform + internalAccountId → only the per-wallet overrideinternalAccountId only → all platforms for that walletquery { admin { disabledPlatforms } }
Patch semantics — only included fields are merged. Existing values preserved.
mutation {
setPlatformSettings(
platform: ARBITRUM
internalAccountId: 714128 # omit for platform-wide
commitStrategy: FULL
minLastSyncedAt: "2025-01-01T00:00:00+00:00"
) {
settingsId
platformSettings {
commitStrategy
minLastSyncedAt
}
}
}
Use introspect("setPlatformSettings") to discover all available arguments.
platform (required) — target blockchain or exchangeinternalAccountId (optional) — scope to a specific wallet. Omit for platform-wide"2025-01-01T00:00:00+00:00"To enable balance-diff-based activity tracking for specific assets:
mutation {
setPlatformSettings(
platform: ARBITRUM
internalAccountId: 714128
balanceRollupSettings: {
assetIdentifiers: ["native"]
interval: DAILY
}
) {
settingsId
platformSettings {
balanceRollupSettings { assetIdentifiers interval }
}
}
}
assetIdentifiers can be "native" for the chain's native asset, or contract addresses for tokens.
Use setPlatformCollectionStatus (not setPlatformSettings) for simple enable/disable.
mutation {
setPlatformCollectionStatus(
platformCollectionStatuses: [
{ platform: ARBITRUM, enabled: true }
{ platform: POLYGON, enabled: false }
]
) {
success
}
}
enabled: true → platform will be collected in commits (FULL)enabled: false → platform is fully skipped (SKIP_ALL)Supports bulk operations — multiple platforms in one call.
When the user provides a wallet address, look up the internal account ID:
query {
internalAccount(identifier: "0x1887fa9edadeab7562b01cc3f4fa246ace2c3cdd") {
results {
id
name
identifier
parentPlatform
}
}
}
Use the returned id as internalAccountId in platform settings mutations.
Note: parentPlatform represents the top-level chain family (e.g., ethereum covers Ethereum, Arbitrum, Polygon, etc.). A single wallet address on ethereum parentPlatform can have platform-specific settings for each L2.
admin { organizationSettings { costBasisStrategy } }setOrganizationSettings(costBasisStrategy: LIFO)admin { disabledPlatforms } — confirm ARBITRUM is in the listsetPlatformCollectionStatus(platformCollectionStatuses: [{platform: ARBITRUM, enabled: true}])internalAccount(identifier: "0x...") → get idplatformSettings(platform: POLYGON, internalAccountId: {id}) → get minLastSyncedAtsetPlatformSettings(platform: POLYGON, internalAccountId: {id}, minLastSyncedAt: "2025-01-01T00:00:00+00:00")internalAccount(identifier: "0x...") → get idplatformSettings(platform: ETHEREUM, internalAccountId: {id})setPlatformSettings(platform: ETHEREUM, internalAccountId: {id}, balanceRollupSettings: {assetIdentifiers: ["native"], interval: DAILY})admin { disabledPlatforms }admin { organizationSettings { pricingApiSource peggedStableCoinsToFiat { assetName currency } pricingApiSourcePerAsset { assetName pricingApiSource } } }| Error | Meaning | Resolution |
|---|---|---|
| 403 / Permission denied | User lacks admin:* permission | Contact org admin to grant access |
| Empty platformSettings results | No custom overrides — platform uses defaults | This is normal; explain that defaults apply |
| "does not exist for organization" | Internal account ID not found in this org | Verify the wallet address and re-resolve |
| Invalid enum value | Wrong value for a setting | Use introspect on the enum type to show valid options |
| DateTime parse error | Wrong format | Must be ISO 8601 with timezone: "2025-01-01T00:00:00+00:00" |
Take anthropics/tres-settings-management from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.