이 MCP로 할 수 있는 일
Provides market forecasts, forecast outcomes, historical performance, available markets, and account usage information.
도구
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['market'], 'properties': {'market': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 200, 'minLength': 1, 'description': 'Market slug from list_markets, for example bitcoin'}, 'confirmReplacement': {'type': 'boolean', 'description': 'Set true only after the user agreed to replace a market they already follow'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'IntegrationUsage': {'type': 'object', 'required': ['calculatedAt', 'tier', 'requests', 'concurrency', 'windows'], 'properties': {'tier': {'enum': ['free', 'starter', 'core', 'pro', 'publisher']}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationWindowUsage'}, 'maxItems': 3, 'minItems': 3}, 'requests': {'type': 'object', 'required': ['perMinute', 'burst', 'remaining', 'nextRequestAt'], 'properties': {'burst': {'type': 'integer', 'minimum': 0}, 'perMinute': {'type': 'integer', 'minimum': 0}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.', 'additionalProperties': False}, 'adjustment': {'type': 'object', 'required': ['expiresAt'], 'properties': {'expiresAt': {'type': ['string', 'null'], 'format': 'date-time'}}, 'description': 'An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.', 'additionalProperties': False}, 'concurrency': {'type': 'object', 'required': ['limit', 'remaining', 'nextRequestAt'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'remaining': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.', 'additionalProperties': False}, 'calculatedAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'additionalProperties': False}, 'IntegrationNotice': {'type': 'object', 'required': ['id', 'period', 'kind', 'message', 'used', 'limit', 'remaining', 'nextCapacityAt'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['approaching_limit', 'limit_reached']}, 'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'period': {'enum': ['day', 'week', 'month']}, 'message': {'type': 'string'}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'IntegrationFollowing': {'type': 'object', 'required': ['followed', 'followLimit', 'canFollowMore', 'readsEveryMarket', 'message', 'followInApp', 'otherMarkets', 'otherMarketsTotal'], 'properties': {'message': {'type': 'string', 'description': 'Plain explanation for the user, including for accounts that read every market.'}, 'followed': {'type': 'integer', 'minimum': 0, 'description': "Markets on the account's following list, as the app counts them."}, 'canFollow': {'type': 'boolean', 'description': 'Whether this connection may follow and unfollow markets.'}, 'followInApp': {'type': 'string', 'format': 'uri', 'description': 'Where the user follows markets in the Kunkafa app.'}, 'followLimit': {'type': ['integer', 'null'], 'minimum': 0, 'description': "The plan's Following count; null when the account reads every market."}, 'otherMarkets': {'type': 'array', 'items': {'type': 'object', 'required': ['market', 'name'], 'properties': {'name': {'type': 'string', 'minLength': 1}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Catalogue markets the account does not follow, by English name, sorted by name; at most 100 (otherMarketsTotal gives the full count). Any market can still be followed by its slug.'}, 'canFollowMore': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'How many more markets can be followed; null when the account reads every market.'}, 'readsEveryMarket': {'type': 'boolean'}, 'otherMarketsTotal': {'type': 'integer', 'minimum': 0, 'description': 'How many catalogue markets the account does not follow.'}, 'howToAllowFollowing': {'type': 'string', 'minLength': 1, 'description': 'Present when canFollow is false.'}}, 'description': 'What the account follows and can still follow. Following decides which markets can be read; it happens in the Kunkafa app.', 'additionalProperties': False}, 'IntegrationTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 UTC timestamp supplied by Kunkafa.'}, 'IntegrationMarketSlug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'description': 'Published English-name market slug returned by authorized discovery.'}, 'IntegrationWindowUsage': {'type': 'object', 'required': ['period', 'used', 'limit', 'remaining', 'nextCapacityAt', 'notice', 'noticeId'], 'properties': {'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'notice': {'enum': ['approaching_limit', 'limit_reached', None]}, 'period': {'enum': ['day', 'week', 'month']}, 'noticeId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.', 'additionalProperties': False}, 'IntegrationFollowingChange': {'type': 'object', 'required': ['market', 'action', 'nextChangeAllowedAt'], 'properties': {'action': {'enum': ['followed', 'unfollowed', 'unchanged']}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}, 'nextChangeAllowedAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}], 'description': 'When a followed market may next be replaced; null while no replacement window runs.'}}, 'additionalProperties': False}}, 'required': ['data', 'following', 'usage', 'notices', 'dataUse'], 'properties': {'data': {'$ref': '#/$defs/IntegrationFollowingChange'}, 'usage': {'$ref': '#/$defs/IntegrationUsage'}, 'dataUse': {'type': 'string', 'description': 'Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.'}, 'notices': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationNotice'}, 'maxItems': 3}, 'following': {'$ref': '#/$defs/IntegrationFollowing'}}, 'description': "The change and the account's following after it. The Kunkafa app shows the same list immediately.", 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['mcp', 'links', 'browserConfirmationRequired', 'disclosureUnits', 'mcpAvailability', 'availabilityMessage'], 'properties': {'mcp': {'const': 'https://kunkafa.com/mcp'}, 'links': {'type': 'object', 'required': ['signup', 'signin', 'manage', 'documentation'], 'properties': {'manage': {'type': 'string', 'pattern': '^https://kunkafa\\.com/'}, 'signin': {'type': 'string', 'pattern': '^https://kunkafa\\.com/'}, 'signup': {'type': 'string', 'pattern': '^https://kunkafa\\.com/'}, 'documentation': {'type': 'string', 'pattern': '^https://kunkafa\\.com/'}}, 'additionalProperties': False}, 'disclosureUnits': {'const': 0}, 'mcpAvailability': {'enum': ['coming_soon', 'available'], 'description': 'Public availability follows release controls.'}, 'availabilityMessage': {'type': 'string'}, 'browserConfirmationRequired': {'const': True}}, 'description': 'MCP get_account_links result: official links to create an account, sign in, manage connections and read the documentation, with a pointer to kunkafa.com.', 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['glossary'], 'properties': {'glossary': {'type': 'object', 'required': ['title', 'terms'], 'properties': {'terms': {'type': 'array', 'items': {'type': 'object', 'required': ['term', 'meaning'], 'properties': {'term': {'type': 'string'}, 'fields': {'type': 'string', 'description': 'Reply fields the term explains.'}, 'meaning': {'type': 'string'}}, 'additionalProperties': False}, 'minItems': 1}, 'title': {'type': 'string'}}, 'additionalProperties': False}}, 'description': 'What every term in Kunkafa replies means and how to read them. Public, static, English.', 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['market'], 'properties': {'market': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 200, 'minLength': 1, 'description': 'Market slug from list_markets, for example bitcoin'}, 'direction': {'enum': ['up', 'down', 'both'], 'type': 'string', 'description': 'Default both'}, 'durations': {'type': 'array', 'items': {'type': 'string', 'pattern': '^\\d{1,5}\\s*[A-Za-z]{1,8}$', 'maxLength': 24, 'minLength': 2}, 'maxItems': 6, 'minItems': 1, 'description': 'Exact duration labels from list_markets, for example ["1 hour", "6 hours"]'}, 'maxDuration': {'type': 'string', 'pattern': '^\\d{1,5}\\s*[A-Za-z]{1,8}$', 'maxLength': 24, 'minLength': 2, 'description': 'Longest duration to include, for example "1 day"'}, 'minDuration': {'type': 'string', 'pattern': '^\\d{1,5}\\s*[A-Za-z]{1,8}$', 'maxLength': 24, 'minLength': 2, 'description': 'Shortest duration to include, for example "1 hour"'}, 'maxTargetPercent': {'type': 'number', 'maximum': 10000, 'minimum': 0, 'description': 'Only targets at most this far from the reference price, in percent'}, 'minTargetPercent': {'type': 'number', 'maximum': 10000, 'minimum': 0, 'description': 'Only targets at least this far from the reference price, in percent'}, 'maxDurationExclusive': {'type': 'boolean', 'description': 'true for "less than maxDuration"; default includes maxDuration'}, 'maxProbabilityPercent': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Only forecasts whose probability is at most this'}, 'minProbabilityPercent': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': "Only forecasts whose probability (Kunkafa's confidence) is at least this"}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'IntegrationUsage': {'type': 'object', 'required': ['calculatedAt', 'tier', 'requests', 'concurrency', 'windows'], 'properties': {'tier': {'enum': ['free', 'starter', 'core', 'pro', 'publisher']}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationWindowUsage'}, 'maxItems': 3, 'minItems': 3}, 'requests': {'type': 'object', 'required': ['perMinute', 'burst', 'remaining', 'nextRequestAt'], 'properties': {'burst': {'type': 'integer', 'minimum': 0}, 'perMinute': {'type': 'integer', 'minimum': 0}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.', 'additionalProperties': False}, 'adjustment': {'type': 'object', 'required': ['expiresAt'], 'properties': {'expiresAt': {'type': ['string', 'null'], 'format': 'date-time'}}, 'description': 'An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.', 'additionalProperties': False}, 'concurrency': {'type': 'object', 'required': ['limit', 'remaining', 'nextRequestAt'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'remaining': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.', 'additionalProperties': False}, 'calculatedAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'additionalProperties': False}, 'IntegrationNotice': {'type': 'object', 'required': ['id', 'period', 'kind', 'message', 'used', 'limit', 'remaining', 'nextCapacityAt'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['approaching_limit', 'limit_reached']}, 'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'period': {'enum': ['day', 'week', 'month']}, 'message': {'type': 'string'}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'IntegrationTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 UTC timestamp supplied by Kunkafa.'}, 'IntegrationMarketSlug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'description': 'Published English-name market slug returned by authorized discovery.'}, 'IntegrationWindowUsage': {'type': 'object', 'required': ['period', 'used', 'limit', 'remaining', 'nextCapacityAt', 'notice', 'noticeId'], 'properties': {'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'notice': {'enum': ['approaching_limit', 'limit_reached', None]}, 'period': {'enum': ['day', 'week', 'month']}, 'noticeId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.', 'additionalProperties': False}, 'IntegrationSelectedOutput': {'type': 'object', 'required': ['direction', 'movePercent', 'probabilityPercent'], 'properties': {'direction': {'enum': ['up', 'down']}, 'movePercent': {'type': 'number'}, 'probabilityPercent': {'type': 'number', 'maximum': 100, 'minimum': 0}}, 'description': "One target-touch forecast. probabilityPercent is Kunkafa's confidence; outputs without one are counted in counts.withoutProbability, not listed.", 'additionalProperties': False}, 'IntegrationSelectedSource': {'type': 'object', 'required': ['duration', 'sourceAt', 'referencePrice', 'outputs', 'label'], 'properties': {'label': {'type': 'string', 'pattern': '^[A-Z]$', 'description': 'Names the source within its duration (A, B, C…): forecasts made together. Sources are read side by side, never merged.'}, 'outputs': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationSelectedOutput'}, 'maxItems': 72, 'minItems': 1}, 'duration': {'type': 'string', 'minLength': 1}, 'sourceAt': {'$ref': '#/$defs/IntegrationTimestamp'}, 'forecastAt': {'$ref': '#/$defs/IntegrationTimestamp'}, 'referencePrice': {'type': 'number', 'exclusiveMinimum': 0}}, 'description': 'A source group within the selection; several can share a duration. Only groups with forecasts are listed; forecastAt is left out when unknown.', 'additionalProperties': False}, 'IntegrationOutlookSelection': {'type': 'object', 'required': ['market', 'name', 'url', 'sourceAt', 'selection', 'availableDurations', 'forecasts', 'counts'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'pattern': '^https://kunkafa\\.com/markets/[a-z0-9-]+/$'}, 'name': {'type': 'string', 'minLength': 1}, 'counts': {'type': 'object', 'required': ['forecasts', 'withoutProbability'], 'properties': {'forecasts': {'type': 'integer', 'maximum': 72, 'minimum': 0}, 'withoutProbability': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}, 'sourceAt': {'$ref': '#/$defs/IntegrationTimestamp'}, 'forecasts': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationSelectedSource'}}, 'selection': {'type': 'object', 'required': ['durations', 'direction', 'minProbabilityPercent', 'maxProbabilityPercent', 'minTargetPercent', 'maxTargetPercent'], 'properties': {'direction': {'enum': ['up', 'down', 'both']}, 'durations': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'minItems': 1}, 'maxTargetPercent': {'type': ['number', 'null']}, 'minTargetPercent': {'type': 'number'}, 'maxProbabilityPercent': {'type': 'number'}, 'minProbabilityPercent': {'type': 'number'}}, 'additionalProperties': False}, 'withoutForecasts': {'type': 'array', 'items': {'type': 'object', 'required': ['duration', 'reason'], 'properties': {'reason': {'enum': ['none_now', 'no_match']}, 'duration': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 40, 'minItems': 1, 'description': 'Asked-for durations with no forecasts: none_now (none at the moment) or no_match (none match the filters). Left out when every duration has forecasts.'}, 'availableDurations': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 40, 'description': 'Durations of this market that have forecasts now; a duration with none is left out.'}}, 'description': "The requested selection of one market's current forecasts. Historical performance and selected past results are read with their own operations.", 'additionalProperties': False}, 'IntegrationOutlookFieldGuide': {'type': 'object', 'required': ['probabilityPercent', 'movePercent', 'referencePrice', 'sourceAt', 'forecastAt', 'label', 'counts', 'interpretation', 'more'], 'properties': {'more': {'type': 'string'}, 'label': {'type': 'string'}, 'counts': {'type': 'string'}, 'sourceAt': {'type': 'string'}, 'forecastAt': {'type': 'string'}, 'movePercent': {'type': 'string'}, 'interpretation': {'type': 'string'}, 'referencePrice': {'type': 'string'}, 'withoutForecasts': {'type': 'string', 'minLength': 1}, 'probabilityPercent': {'type': 'string'}}, 'additionalProperties': False}}, 'required': ['data', 'fieldGuide', 'usage', 'notices', 'dataUse'], 'properties': {'data': {'$ref': '#/$defs/IntegrationOutlookSelection'}, 'usage': {'$ref': '#/$defs/IntegrationUsage'}, 'dataUse': {'type': 'string', 'description': 'Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.'}, 'notices': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationNotice'}, 'maxItems': 3}, 'fieldGuide': {'$ref': '#/$defs/IntegrationOutlookFieldGuide'}}, 'description': "One market's selected forecasts. Each distinct selection is one disclosure against the allowance; repeating the same selection on unchanged data is not charged again.", 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['market'], 'properties': {'market': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 200, 'minLength': 1, 'description': 'Market slug from list_markets, for example bitcoin'}, 'probabilityPercent': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': "A forecast's confidence; the headline shows past results at the nearest published level at or below it"}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'IntegrationUsage': {'type': 'object', 'required': ['calculatedAt', 'tier', 'requests', 'concurrency', 'windows'], 'properties': {'tier': {'enum': ['free', 'starter', 'core', 'pro', 'publisher']}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationWindowUsage'}, 'maxItems': 3, 'minItems': 3}, 'requests': {'type': 'object', 'required': ['perMinute', 'burst', 'remaining', 'nextRequestAt'], 'properties': {'burst': {'type': 'integer', 'minimum': 0}, 'perMinute': {'type': 'integer', 'minimum': 0}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.', 'additionalProperties': False}, 'adjustment': {'type': 'object', 'required': ['expiresAt'], 'properties': {'expiresAt': {'type': ['string', 'null'], 'format': 'date-time'}}, 'description': 'An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.', 'additionalProperties': False}, 'concurrency': {'type': 'object', 'required': ['limit', 'remaining', 'nextRequestAt'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'remaining': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.', 'additionalProperties': False}, 'calculatedAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'additionalProperties': False}, 'IntegrationNotice': {'type': 'object', 'required': ['id', 'period', 'kind', 'message', 'used', 'limit', 'remaining', 'nextCapacityAt'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['approaching_limit', 'limit_reached']}, 'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'period': {'enum': ['day', 'week', 'month']}, 'message': {'type': 'string'}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'IntegrationTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 UTC timestamp supplied by Kunkafa.'}, 'IntegrationMarketSlug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'description': 'Published English-name market slug returned by authorized discovery.'}, 'IntegrationPerformance': {'type': 'object', 'required': ['market', 'sourceAt', 'defaultProbabilityThresholdPercent', 'periods'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'pattern': '^https://kunkafa\\.com/markets/[a-z0-9-]+/$', 'description': "The market's page on kunkafa.com."}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['period', 'points'], 'properties': {'period': {'enum': ['d1', 'd7', 'd30', 'all_time']}, 'points': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationPerformancePoint'}}}, 'additionalProperties': False}, 'maxItems': 4, 'minItems': 4}, 'sourceAt': {'$ref': '#/$defs/IntegrationTimestamp'}, 'latestReport': {'$ref': '#/$defs/IntegrationReportEvidence'}, 'defaultProbabilityThresholdPercent': {'type': 'number', 'maximum': 100, 'minimum': 0}}, 'description': 'Market-wide historical evidence at each published classifier probability threshold and reporting period. Sample counts and missing rates are preserved; this is not evidence matched to each current output.', 'additionalProperties': False}, 'IntegrationWindowUsage': {'type': 'object', 'required': ['period', 'used', 'limit', 'remaining', 'nextCapacityAt', 'notice', 'noticeId'], 'properties': {'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'notice': {'enum': ['approaching_limit', 'limit_reached', None]}, 'period': {'enum': ['day', 'week', 'month']}, 'noticeId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.', 'additionalProperties': False}, 'IntegrationReportShares': {'type': 'object', 'required': ['settledForecasts', 'bandsPercent'], 'properties': {'bandsPercent': {'type': 'array', 'items': {'type': 'number', 'maximum': 100, 'minimum': 0}, 'maxItems': 8, 'minItems': 8, 'description': 'Share of the settled forecasts in each band, in the order of bands; sums to 100.'}, 'settledForecasts': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'IntegrationReportEvidence': {'oneOf': [{'type': 'object', 'required': ['status', 'data'], 'properties': {'data': {'$ref': '#/$defs/IntegrationReportBreakdown'}, 'status': {'const': 'available'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['status', 'data'], 'properties': {'data': {'type': 'null'}, 'status': {'const': 'unavailable'}}, 'additionalProperties': False}]}, 'IntegrationReportBreakdown': {'type': 'object', 'required': ['market', 'edition', 'window', 'generatedAt', 'reportUrl', 'bands', 'floors'], 'properties': {'bands': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'fromPct', 'toPct'], 'properties': {'key': {'type': 'string'}, 'toPct': {'type': ['number', 'null']}, 'fromPct': {'type': 'number'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 8}, 'floors': {'type': 'array', 'items': {'type': 'object', 'required': ['minimumProbabilityPercent', 'settledForecasts', 'bandsPercent', 'up', 'down'], 'properties': {'up': {'$ref': '#/$defs/IntegrationReportShares'}, 'down': {'$ref': '#/$defs/IntegrationReportShares'}, 'bandsPercent': {'type': 'array', 'items': {'type': 'number', 'maximum': 100, 'minimum': 0}, 'maxItems': 8, 'minItems': 8, 'description': 'Share of the settled forecasts in each band, in the order of bands; sums to 100.'}, 'settledForecasts': {'type': 'integer', 'minimum': 0}, 'minimumProbabilityPercent': {'type': 'integer', 'maximum': 100, 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1}, 'market': {'type': 'string'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}}, 'additionalProperties': False}, 'edition': {'const': 'full'}, 'reportUrl': {'type': 'string', 'pattern': '^https://kunkafa\\.com/reports/'}, 'generatedAt': {'type': 'string'}}, 'description': "The market's latest full published report: every settled forecast placed in one of eight bands by how far price travelled toward its target within the duration, as a percent of the distance to the target (100 is the target itself; 300 is three times that distance, not a price change). All eight bands are always present.", 'additionalProperties': False}, 'IntegrationPerformancePoint': {'type': 'object', 'required': ['probabilityThresholdPercent', 'sampleCount', 'targetsReachedPercent', 'status'], 'properties': {'status': {'enum': ['available', 'insufficient']}, 'sampleCount': {'type': 'integer', 'minimum': 0}, 'targetsReachedPercent': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'probabilityThresholdPercent': {'type': 'number', 'maximum': 100, 'minimum': 0}}, 'description': 'Published classifier probability threshold and observed target-touch rate. Rates are null for fewer than 100 examples or missing evidence; classifier probability is separate from historical success.', 'additionalProperties': False}, 'IntegrationPerformanceHeadline': {'type': 'object', 'required': ['probabilityThresholdPercent', 'basis', 'periods'], 'properties': {'basis': {'enum': ['default', 'requested']}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['period', 'sampleCount', 'targetsReachedPercent', 'status'], 'properties': {'period': {'enum': ['d1', 'd7', 'd30', 'all_time']}, 'status': {'enum': ['available', 'insufficient']}, 'sampleCount': {'type': 'integer', 'minimum': 0}, 'targetsReachedPercent': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}}, 'additionalProperties': False}, 'maxItems': 4, 'minItems': 4}, 'probabilityThresholdPercent': {'type': 'number', 'maximum': 100, 'minimum': 0}}, 'description': "The row to read first: past results at one published confidence level for each reporting period. basis is default (the market's default level) or requested (the nearest level at or below probabilityPercent).", 'additionalProperties': False}}, 'required': ['data', 'usage', 'notices', 'dataUse', 'fieldGuide', 'headline'], 'properties': {'data': {'allOf': [{'$ref': '#/$defs/IntegrationPerformance'}, {'required': ['url']}]}, 'usage': {'$ref': '#/$defs/IntegrationUsage'}, 'dataUse': {'type': 'string', 'description': 'Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.'}, 'notices': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationNotice'}, 'maxItems': 3}, 'headline': {'$ref': '#/$defs/IntegrationPerformanceHeadline'}, 'fieldGuide': {'type': 'object', 'required': ['periods', 'probabilityThresholdPercent', 'targetsReachedPercent', 'sampleCount', 'latestReport'], 'properties': {'periods': {'type': 'string'}, 'sampleCount': {'type': 'string'}, 'latestReport': {'type': 'string'}, 'targetsReachedPercent': {'type': 'string'}, 'probabilityThresholdPercent': {'type': 'string'}}, 'description': 'Plain meanings of the returned fields.', 'additionalProperties': False}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['market'], 'properties': {'market': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 200, 'minLength': 1, 'description': 'Market slug from list_markets, for example bitcoin'}, 'durations': {'type': 'array', 'items': {'type': 'string', 'pattern': '^\\d{1,5}\\s*[A-Za-z]{1,8}$', 'maxLength': 24, 'minLength': 2}, 'maxItems': 6, 'minItems': 1, 'description': 'Only these duration labels, for example ["1 hour", "1 day"]; default every duration'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'IntegrationUsage': {'type': 'object', 'required': ['calculatedAt', 'tier', 'requests', 'concurrency', 'windows'], 'properties': {'tier': {'enum': ['free', 'starter', 'core', 'pro', 'publisher']}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationWindowUsage'}, 'maxItems': 3, 'minItems': 3}, 'requests': {'type': 'object', 'required': ['perMinute', 'burst', 'remaining', 'nextRequestAt'], 'properties': {'burst': {'type': 'integer', 'minimum': 0}, 'perMinute': {'type': 'integer', 'minimum': 0}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.', 'additionalProperties': False}, 'adjustment': {'type': 'object', 'required': ['expiresAt'], 'properties': {'expiresAt': {'type': ['string', 'null'], 'format': 'date-time'}}, 'description': 'An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.', 'additionalProperties': False}, 'concurrency': {'type': 'object', 'required': ['limit', 'remaining', 'nextRequestAt'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'remaining': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.', 'additionalProperties': False}, 'calculatedAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'additionalProperties': False}, 'IntegrationNotice': {'type': 'object', 'required': ['id', 'period', 'kind', 'message', 'used', 'limit', 'remaining', 'nextCapacityAt'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['approaching_limit', 'limit_reached']}, 'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'period': {'enum': ['day', 'week', 'month']}, 'message': {'type': 'string'}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'IntegrationResult': {'type': 'object', 'required': ['id', 'direction', 'predictionAt', 'closedAt', 'probabilityPercent', 'movePercent', 'outcome', 'durationLabel', 'mfePercent', 'targetProgressPercent'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-f0-9]{24}$'}, 'outcome': {'enum': ['reached', 'not-reached']}, 'closedAt': {'$ref': '#/$defs/IntegrationTimestamp'}, 'direction': {'enum': ['up', 'down']}, 'mfePercent': {'type': ['number', 'null'], 'minimum': 0, 'description': 'Recorded furthest favorable price movement in percentage points.'}, 'movePercent': {'type': 'number'}, 'predictionAt': {'$ref': '#/$defs/IntegrationTimestamp'}, 'durationLabel': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'object', 'required': ['en', 'ar'], 'properties': {'ar': {'type': 'string'}, 'en': {'type': 'string'}}, 'additionalProperties': False}], 'description': 'English label in API and MCP replies; the app hand-off file keeps both languages.'}, 'probabilityPercent': {'type': 'number', 'maximum': 100, 'minimum': 80, 'description': 'Rounded to two decimal places. Eligibility uses original confidence strictly above 80%; a qualifying value just above 80% can display as 80% after rounding.'}, 'targetProgressPercent': {'type': ['number', 'null'], 'minimum': 0, 'description': 'Favorable move as a percentage of target distance; can exceed 100. Missing is null.'}}, 'description': 'A selected completed result; confidence is the value recorded at prediction time, separate from aggregate performance.', 'additionalProperties': False}, 'IntegrationResults': {'type': 'object', 'required': ['market', 'sourceAt', 'results'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'pattern': '^https://kunkafa\\.com/markets/[a-z0-9-]+/$', 'description': "The market's page on kunkafa.com."}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}, 'results': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationResult'}}, 'sourceAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'description': 'Latest eligible completed result for every distinct original duration, across both directions, newest closure first. Previous 90 days; original duration strictly longer than 24 hours and recorded confidence strictly above 80%. Reached and missed targets both qualify. Selected results are not an aggregate success rate or full archive.', 'additionalProperties': False}, 'IntegrationTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 UTC timestamp supplied by Kunkafa.'}, 'IntegrationMarketSlug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'description': 'Published English-name market slug returned by authorized discovery.'}, 'IntegrationWindowUsage': {'type': 'object', 'required': ['period', 'used', 'limit', 'remaining', 'nextCapacityAt', 'notice', 'noticeId'], 'properties': {'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'notice': {'enum': ['approaching_limit', 'limit_reached', None]}, 'period': {'enum': ['day', 'week', 'month']}, 'noticeId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.', 'additionalProperties': False}}, 'required': ['data', 'usage', 'notices', 'dataUse', 'fieldGuide'], 'properties': {'data': {'allOf': [{'$ref': '#/$defs/IntegrationResults'}, {'required': ['url']}]}, 'usage': {'$ref': '#/$defs/IntegrationUsage'}, 'dataUse': {'type': 'string', 'description': 'Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.'}, 'notices': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationNotice'}, 'maxItems': 3}, 'fieldGuide': {'type': 'object', 'required': ['results', 'probabilityPercent', 'movePercent', 'outcome', 'mfePercent', 'targetProgressPercent'], 'properties': {'outcome': {'type': 'string'}, 'results': {'type': 'string'}, 'mfePercent': {'type': 'string'}, 'movePercent': {'type': 'string'}, 'probabilityPercent': {'type': 'string'}, 'targetProgressPercent': {'type': 'string'}}, 'description': 'Plain meanings of the returned fields.', 'additionalProperties': False}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Items per page, 1 to 50; default 50'}, 'cursor': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]+$', 'maxLength': 256, 'minLength': 1, 'description': 'page.nextCursor from the previous reply, to read the next page; omit for the first page'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'IntegrationPage': {'type': 'object', 'required': ['total', 'returned', 'nextCursor'], 'properties': {'total': {'type': 'integer', 'minimum': 0}, 'returned': {'type': 'integer', 'maximum': 50, 'minimum': 0}, 'nextCursor': {'anyOf': [{'type': 'string', 'pattern': '^[A-Za-z0-9_-]+$', 'maxLength': 256, 'minLength': 1}, {'type': 'null'}]}}, 'description': 'Follow nextCursor until null. Cursors are invalidated by relevant access or market-list changes; restart without a cursor.', 'additionalProperties': False}, 'IntegrationUsage': {'type': 'object', 'required': ['calculatedAt', 'tier', 'requests', 'concurrency', 'windows'], 'properties': {'tier': {'enum': ['free', 'starter', 'core', 'pro', 'publisher']}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationWindowUsage'}, 'maxItems': 3, 'minItems': 3}, 'requests': {'type': 'object', 'required': ['perMinute', 'burst', 'remaining', 'nextRequestAt'], 'properties': {'burst': {'type': 'integer', 'minimum': 0}, 'perMinute': {'type': 'integer', 'minimum': 0}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.', 'additionalProperties': False}, 'adjustment': {'type': 'object', 'required': ['expiresAt'], 'properties': {'expiresAt': {'type': ['string', 'null'], 'format': 'date-time'}}, 'description': 'An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.', 'additionalProperties': False}, 'concurrency': {'type': 'object', 'required': ['limit', 'remaining', 'nextRequestAt'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'remaining': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.', 'additionalProperties': False}, 'calculatedAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'additionalProperties': False}, 'IntegrationNotice': {'type': 'object', 'required': ['id', 'period', 'kind', 'message', 'used', 'limit', 'remaining', 'nextCapacityAt'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['approaching_limit', 'limit_reached']}, 'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'period': {'enum': ['day', 'week', 'month']}, 'message': {'type': 'string'}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'IntegrationFollowing': {'type': 'object', 'required': ['followed', 'followLimit', 'canFollowMore', 'readsEveryMarket', 'message', 'followInApp', 'otherMarkets', 'otherMarketsTotal'], 'properties': {'message': {'type': 'string', 'description': 'Plain explanation for the user, including for accounts that read every market.'}, 'followed': {'type': 'integer', 'minimum': 0, 'description': "Markets on the account's following list, as the app counts them."}, 'canFollow': {'type': 'boolean', 'description': 'Whether this connection may follow and unfollow markets.'}, 'followInApp': {'type': 'string', 'format': 'uri', 'description': 'Where the user follows markets in the Kunkafa app.'}, 'followLimit': {'type': ['integer', 'null'], 'minimum': 0, 'description': "The plan's Following count; null when the account reads every market."}, 'otherMarkets': {'type': 'array', 'items': {'type': 'object', 'required': ['market', 'name'], 'properties': {'name': {'type': 'string', 'minLength': 1}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Catalogue markets the account does not follow, by English name, sorted by name; at most 100 (otherMarketsTotal gives the full count). Any market can still be followed by its slug.'}, 'canFollowMore': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'How many more markets can be followed; null when the account reads every market.'}, 'readsEveryMarket': {'type': 'boolean'}, 'otherMarketsTotal': {'type': 'integer', 'minimum': 0, 'description': 'How many catalogue markets the account does not follow.'}, 'howToAllowFollowing': {'type': 'string', 'minLength': 1, 'description': 'Present when canFollow is false.'}}, 'description': 'What the account follows and can still follow. Following decides which markets can be read; it happens in the Kunkafa app.', 'additionalProperties': False}, 'IntegrationTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 UTC timestamp supplied by Kunkafa.'}, 'IntegrationMarketSlug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'description': 'Published English-name market slug returned by authorized discovery.'}, 'IntegrationWindowUsage': {'type': 'object', 'required': ['period', 'used', 'limit', 'remaining', 'nextCapacityAt', 'notice', 'noticeId'], 'properties': {'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'notice': {'enum': ['approaching_limit', 'limit_reached', None]}, 'period': {'enum': ['day', 'week', 'month']}, 'noticeId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.', 'additionalProperties': False}}, 'required': ['data', 'following', 'usage', 'notices', 'page', 'dataUse'], 'properties': {'data': {'type': 'object', 'required': ['permittedMarkets', 'outlookLimits', 'connection'], 'properties': {'connection': {'type': 'object', 'required': ['kind', 'permissions', 'expiresAt', 'canFollow'], 'properties': {'kind': {'enum': ['oauth', 'personal_token']}, 'idleDays': {'const': 90}, 'canFollow': {'type': 'boolean', 'description': 'Whether this connection may follow and unfollow markets (the following:write permission).'}, 'expiresAt': {'$ref': '#/$defs/IntegrationTimestamp'}, 'permissions': {'type': 'array', 'items': {'enum': ['markets:read', 'outlooks:read', 'performance:read', 'results:read', 'usage:read', 'following:write']}, 'maxItems': 6, 'minItems': 1, 'uniqueItems': True}, 'howToAllowFollowing': {'type': 'string', 'description': 'Present only when canFollow is false: how the user allows following for this connection.'}, 'staysConnectedWhileUsed': {'const': True}}, 'description': "This connection's permissions and expiry. An MCP (OAuth) connection stays connected while used: it expires after idleDays without use, at most one year after it was approved. A reconnect from the same app replaces it without using another connection.", 'additionalProperties': False}, 'outlookLimits': {'type': 'object', 'required': ['marketsPerCall', 'maxDurations', 'maxForecasts'], 'properties': {'maxDurations': {'const': 6}, 'maxForecasts': {'const': 72}, 'marketsPerCall': {'const': 1}}, 'description': 'What one get_outlooks call can return.', 'additionalProperties': False}, 'permittedMarkets': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationMarketSlug'}, 'maxItems': 50}}, 'additionalProperties': False}, 'page': {'$ref': '#/$defs/IntegrationPage'}, 'usage': {'$ref': '#/$defs/IntegrationUsage'}, 'dataUse': {'type': 'string', 'description': 'Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.'}, 'notices': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationNotice'}, 'maxItems': 3}, 'following': {'$ref': '#/$defs/IntegrationFollowing'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Items per page, 1 to 50; default 50'}, 'cursor': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]+$', 'maxLength': 256, 'minLength': 1, 'description': 'page.nextCursor from the previous reply, to read the next page; omit for the first page'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'IntegrationPage': {'type': 'object', 'required': ['total', 'returned', 'nextCursor'], 'properties': {'total': {'type': 'integer', 'minimum': 0}, 'returned': {'type': 'integer', 'maximum': 50, 'minimum': 0}, 'nextCursor': {'anyOf': [{'type': 'string', 'pattern': '^[A-Za-z0-9_-]+$', 'maxLength': 256, 'minLength': 1}, {'type': 'null'}]}}, 'description': 'Follow nextCursor until null. Cursors are invalidated by relevant access or market-list changes; restart without a cursor.', 'additionalProperties': False}, 'IntegrationUsage': {'type': 'object', 'required': ['calculatedAt', 'tier', 'requests', 'concurrency', 'windows'], 'properties': {'tier': {'enum': ['free', 'starter', 'core', 'pro', 'publisher']}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationWindowUsage'}, 'maxItems': 3, 'minItems': 3}, 'requests': {'type': 'object', 'required': ['perMinute', 'burst', 'remaining', 'nextRequestAt'], 'properties': {'burst': {'type': 'integer', 'minimum': 0}, 'perMinute': {'type': 'integer', 'minimum': 0}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.', 'additionalProperties': False}, 'adjustment': {'type': 'object', 'required': ['expiresAt'], 'properties': {'expiresAt': {'type': ['string', 'null'], 'format': 'date-time'}}, 'description': 'An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.', 'additionalProperties': False}, 'concurrency': {'type': 'object', 'required': ['limit', 'remaining', 'nextRequestAt'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'remaining': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.', 'additionalProperties': False}, 'calculatedAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'additionalProperties': False}, 'IntegrationMarket': {'type': 'object', 'required': ['market', 'name', 'url', 'durations'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'pattern': '^https://kunkafa\\.com/markets/[a-z0-9-]+/$'}, 'name': {'type': 'string', 'minLength': 1}, 'note': {'type': 'string', 'minLength': 1, 'description': 'Present only when the market has no forecasts at the moment.'}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}, 'durations': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 40, 'description': 'Durations that have forecasts now, shortest first; use these labels in get_outlooks. Empty, with note, when the market has none at the moment.'}}, 'additionalProperties': False}, 'IntegrationNotice': {'type': 'object', 'required': ['id', 'period', 'kind', 'message', 'used', 'limit', 'remaining', 'nextCapacityAt'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['approaching_limit', 'limit_reached']}, 'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'period': {'enum': ['day', 'week', 'month']}, 'message': {'type': 'string'}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'IntegrationFollowing': {'type': 'object', 'required': ['followed', 'followLimit', 'canFollowMore', 'readsEveryMarket', 'message', 'followInApp', 'otherMarkets', 'otherMarketsTotal'], 'properties': {'message': {'type': 'string', 'description': 'Plain explanation for the user, including for accounts that read every market.'}, 'followed': {'type': 'integer', 'minimum': 0, 'description': "Markets on the account's following list, as the app counts them."}, 'canFollow': {'type': 'boolean', 'description': 'Whether this connection may follow and unfollow markets.'}, 'followInApp': {'type': 'string', 'format': 'uri', 'description': 'Where the user follows markets in the Kunkafa app.'}, 'followLimit': {'type': ['integer', 'null'], 'minimum': 0, 'description': "The plan's Following count; null when the account reads every market."}, 'otherMarkets': {'type': 'array', 'items': {'type': 'object', 'required': ['market', 'name'], 'properties': {'name': {'type': 'string', 'minLength': 1}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Catalogue markets the account does not follow, by English name, sorted by name; at most 100 (otherMarketsTotal gives the full count). Any market can still be followed by its slug.'}, 'canFollowMore': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'How many more markets can be followed; null when the account reads every market.'}, 'readsEveryMarket': {'type': 'boolean'}, 'otherMarketsTotal': {'type': 'integer', 'minimum': 0, 'description': 'How many catalogue markets the account does not follow.'}, 'howToAllowFollowing': {'type': 'string', 'minLength': 1, 'description': 'Present when canFollow is false.'}}, 'description': 'What the account follows and can still follow. Following decides which markets can be read; it happens in the Kunkafa app.', 'additionalProperties': False}, 'IntegrationTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 UTC timestamp supplied by Kunkafa.'}, 'IntegrationMarketSlug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'description': 'Published English-name market slug returned by authorized discovery.'}, 'IntegrationWindowUsage': {'type': 'object', 'required': ['period', 'used', 'limit', 'remaining', 'nextCapacityAt', 'notice', 'noticeId'], 'properties': {'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'notice': {'enum': ['approaching_limit', 'limit_reached', None]}, 'period': {'enum': ['day', 'week', 'month']}, 'noticeId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.', 'additionalProperties': False}}, 'required': ['data', 'following', 'usage', 'notices', 'page', 'dataUse'], 'properties': {'data': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationMarket'}, 'maxItems': 50}, 'page': {'$ref': '#/$defs/IntegrationPage'}, 'usage': {'$ref': '#/$defs/IntegrationUsage'}, 'dataUse': {'type': 'string', 'description': 'Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.'}, 'notices': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationNotice'}, 'maxItems': 3}, 'following': {'$ref': '#/$defs/IntegrationFollowing'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['market'], 'properties': {'market': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 200, 'minLength': 1, 'description': 'Market slug from list_markets, for example bitcoin'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$defs': {'IntegrationUsage': {'type': 'object', 'required': ['calculatedAt', 'tier', 'requests', 'concurrency', 'windows'], 'properties': {'tier': {'enum': ['free', 'starter', 'core', 'pro', 'publisher']}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationWindowUsage'}, 'maxItems': 3, 'minItems': 3}, 'requests': {'type': 'object', 'required': ['perMinute', 'burst', 'remaining', 'nextRequestAt'], 'properties': {'burst': {'type': 'integer', 'minimum': 0}, 'perMinute': {'type': 'integer', 'minimum': 0}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.', 'additionalProperties': False}, 'adjustment': {'type': 'object', 'required': ['expiresAt'], 'properties': {'expiresAt': {'type': ['string', 'null'], 'format': 'date-time'}}, 'description': 'An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.', 'additionalProperties': False}, 'concurrency': {'type': 'object', 'required': ['limit', 'remaining', 'nextRequestAt'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'remaining': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'nextRequestAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.', 'additionalProperties': False}, 'calculatedAt': {'$ref': '#/$defs/IntegrationTimestamp'}}, 'additionalProperties': False}, 'IntegrationNotice': {'type': 'object', 'required': ['id', 'period', 'kind', 'message', 'used', 'limit', 'remaining', 'nextCapacityAt'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['approaching_limit', 'limit_reached']}, 'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'period': {'enum': ['day', 'week', 'month']}, 'message': {'type': 'string'}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'IntegrationFollowing': {'type': 'object', 'required': ['followed', 'followLimit', 'canFollowMore', 'readsEveryMarket', 'message', 'followInApp', 'otherMarkets', 'otherMarketsTotal'], 'properties': {'message': {'type': 'string', 'description': 'Plain explanation for the user, including for accounts that read every market.'}, 'followed': {'type': 'integer', 'minimum': 0, 'description': "Markets on the account's following list, as the app counts them."}, 'canFollow': {'type': 'boolean', 'description': 'Whether this connection may follow and unfollow markets.'}, 'followInApp': {'type': 'string', 'format': 'uri', 'description': 'Where the user follows markets in the Kunkafa app.'}, 'followLimit': {'type': ['integer', 'null'], 'minimum': 0, 'description': "The plan's Following count; null when the account reads every market."}, 'otherMarkets': {'type': 'array', 'items': {'type': 'object', 'required': ['market', 'name'], 'properties': {'name': {'type': 'string', 'minLength': 1}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Catalogue markets the account does not follow, by English name, sorted by name; at most 100 (otherMarketsTotal gives the full count). Any market can still be followed by its slug.'}, 'canFollowMore': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'How many more markets can be followed; null when the account reads every market.'}, 'readsEveryMarket': {'type': 'boolean'}, 'otherMarketsTotal': {'type': 'integer', 'minimum': 0, 'description': 'How many catalogue markets the account does not follow.'}, 'howToAllowFollowing': {'type': 'string', 'minLength': 1, 'description': 'Present when canFollow is false.'}}, 'description': 'What the account follows and can still follow. Following decides which markets can be read; it happens in the Kunkafa app.', 'additionalProperties': False}, 'IntegrationTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'ISO 8601 UTC timestamp supplied by Kunkafa.'}, 'IntegrationMarketSlug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'description': 'Published English-name market slug returned by authorized discovery.'}, 'IntegrationWindowUsage': {'type': 'object', 'required': ['period', 'used', 'limit', 'remaining', 'nextCapacityAt', 'notice', 'noticeId'], 'properties': {'used': {'type': 'integer', 'minimum': 0}, 'limit': {'type': 'integer', 'minimum': 0}, 'notice': {'enum': ['approaching_limit', 'limit_reached', None]}, 'period': {'enum': ['day', 'week', 'month']}, 'noticeId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remaining': {'type': 'integer', 'minimum': 0}, 'nextCapacityAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}]}}, 'description': 'Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.', 'additionalProperties': False}, 'IntegrationFollowingChange': {'type': 'object', 'required': ['market', 'action', 'nextChangeAllowedAt'], 'properties': {'action': {'enum': ['followed', 'unfollowed', 'unchanged']}, 'market': {'$ref': '#/$defs/IntegrationMarketSlug'}, 'nextChangeAllowedAt': {'anyOf': [{'$ref': '#/$defs/IntegrationTimestamp'}, {'type': 'null'}], 'description': 'When a followed market may next be replaced; null while no replacement window runs.'}}, 'additionalProperties': False}}, 'required': ['data', 'following', 'usage', 'notices', 'dataUse'], 'properties': {'data': {'$ref': '#/$defs/IntegrationFollowingChange'}, 'usage': {'$ref': '#/$defs/IntegrationUsage'}, 'dataUse': {'type': 'string', 'description': 'Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.'}, 'notices': {'type': 'array', 'items': {'$ref': '#/$defs/IntegrationNotice'}, 'maxItems': 3}, 'following': {'$ref': '#/$defs/IntegrationFollowing'}}, 'description': "The change and the account's following after it. The Kunkafa app shows the same list immediately.", 'additionalProperties': False}
최근 도구 변경
유사한 MCP 서버
AlpineDataWorks Intelligence Server
Provides economic, market, supply-chain, real-estate, energy, consumer, labor, and other scored intelligence indices with histori…
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Valuein — SEC EDGAR Fundamentals & Smart-Money Data
Provides point-in-time SEC EDGAR fundamentals, filings, ownership signals, financial analysis, valuation models, research reports…
DFX Real Estate Intelligence
Provides US commercial real estate, parcel, debt maturity, bank CRE exposure, private capital, investor, ownership, occupancy, an…
equibles
Provides equity and market research tools covering SEC filings, company financials, portfolios, prices, options, macroeconomic da…
EventTrader MCP
Provides prediction-market research and trading capabilities, including real-time event-market data, CLOB execution paths, fund i…
simplefunctions
Provides prediction-market data, thesis analysis, market signals, portfolio tracking, and automated intent-based trading workflow…
Signal8
Provides SEC filings, dilution data, insider and institutional ownership, and political-trade data.