TensorFeed
AI news, model pricing, service status, and machine-payable premium tools. AFTA-certified.
사용해야 할까요
품질 및 안전성
발견 사항 (6)
- HIGH
- MEDIUMsearch_agent_directory에서
- MEDIUMroute_verdict에서
- MEDIUMwhats_new에서
- LOWget_osv_advisory_by_id에서
- INFOget_news_articles에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"@tensorfeed/mcp-server"
]
}
}
}실행 가능한 패키지
2.0.1stdio원격 엔드포인트
https://tensorfeed.ai/api/mcpstreamable-httphttps://mcp.tensorfeed.ai/mcpstreamable-http할 수 있는 일
도구 목록
도구 (27)
🟢get_news_articles(limit, category)
Get the latest AI news articles aggregated from 12+ sources (Anthropic, OpenAI, Google, HuggingFace, TechCrunch, The Verge, Hacker News, etc). Polled every 10 min, deduplicated, sanitized for prompt injection. Returns up to 200 articles with title, snippet, source, and publishedAt.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Max articles to return (1-200)",
"default": 25
},
"category": {
"type": "string",
"description": "Optional category filter (e.g. models, business, research)"
}
}
}🟢get_status_summary
Get the live operational status of every major AI service tracked by TensorFeed (Claude, ChatGPT, Gemini, Perplexity, Cohere, Mistral, HuggingFace, Replicate, Midjourney, etc). Polled every 2 min. Returns operational | degraded | down per service plus the most recent incident.
입력 스키마
{
"type": "object",
"properties": {}
}🟢get_models
Get the model pricing and specs catalog across providers (Anthropic, OpenAI, Google, Meta, Mistral, Cohere, etc). Includes per-token pricing, context windows, capabilities, deprecation flags. Refreshed daily.
입력 스키마
{
"type": "object",
"properties": {}
}🟢get_cve_record(cve_id)
Look up a single CVE Record v5.2 from the MITRE CVE List by ID (e.g. CVE-2024-3094). Lazy-fetched and cached 7 days. License: MITRE CVE Terms of Use, commercial redistribution permitted; the response includes the standard attribution block.
입력 스키마
{
"type": "object",
"properties": {
"cve_id": {
"type": "string",
"description": "CVE identifier in CVE-YYYY-NNNNN form, case-insensitive"
}
},
"required": [
"cve_id"
]
}🟢get_kev_catalog(limit)
Get the CISA Known Exploited Vulnerabilities (KEV) catalog. Returns the most recent N entries plus catalog metadata. Refreshed daily at 06:30 UTC. License: US Government public domain. ~1500 actively-exploited CVEs.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Top-N most-recent entries (1-50)",
"default": 25
}
}
}🟢get_epss_score(cve_id)
Get the EPSS (Exploit Prediction Scoring System) probability for one CVE, sourced from FIRST.org. Returns the daily probability (0-1) that the CVE will be exploited in the next 30 days plus a percentile rank. License: FIRST.org free-for-any-use.
입력 스키마
{
"type": "object",
"properties": {
"cve_id": {
"type": "string",
"description": "CVE identifier in CVE-YYYY-NNNNN form"
}
},
"required": [
"cve_id"
]
}🟢get_osv_advisory_for_package(ecosystem, name, version)
Cross-ecosystem vulnerability advisory lookup via OSV.dev. Given an ecosystem (PyPI, npm, Go, crates.io, Maven, NuGet, RubyGems, Packagist, etc) and a package name (optional version), returns advisories affecting that package. License: Apache 2.0.
입력 스키마
{
"type": "object",
"properties": {
"ecosystem": {
"type": "string",
"description": "OSV ecosystem identifier (PyPI, npm, Go, crates.io, etc)"
},
"name": {
"type": "string",
"description": "Package name"
},
"version": {
"type": "string",
"description": "Optional package version"
}
},
"required": [
"ecosystem",
"name"
]
}🟢get_osv_advisory_by_id(id)
Look up a single OSV.dev advisory by ID. Accepts GHSA / CVE / PYSEC / RUSTSEC / GO / OSV / DSA / ALPINE / DEBIAN / UBUNTU and other documented identifier prefixes. License: Apache 2.0.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Advisory ID, e.g. GHSA-r75f-5x8p-qvmc or CVE-2024-3094"
}
},
"required": [
"id"
]
}🟢check_ai_supply_chain_risk(package_name, ecosystem)
Check the TensorFeed AI/MCP/LLM supply-chain IOC feed. Returns publicly-disclosed malicious npm/PyPI packages whose name or summary signals relevance to AI agent operators. With no args, returns the whole snapshot (typically a small number of entries). With "package_name", returns only entries matching that name (substring, case-insensitive) so an agent can ask "is X risky right now?" before installing. Each entry cites its GHSA primary source. Posture: TF republishes already-public advisories; the listed primary source is authoritative.
입력 스키마
{
"type": "object",
"properties": {
"package_name": {
"type": "string",
"description": "Optional case-insensitive substring of the package name (e.g. \"mistralai\" or \"@mistralai/mistralai-gcp\"). If omitted, returns all current entries."
},
"ecosystem": {
"type": "string",
"description": "Optional ecosystem filter: \"npm\" or \"pip\""
}
}
}🟢check_agent_reputation(wallet, token_prefix)
Look up an agent's public reputation card from the TensorFeed Agent Reputation Bureau. Takes a wallet (0x + 40 hex) OR a token_prefix (first 16 chars of a tf_live_ bearer). Returns the full ReputationCard: composite + sub-metric ranks (reliability, spend, activity, streak), trust grade A through F, public flags (new_wallet, spend_spike, claim_disputed, etc), wallet age, first_seen, last_active, ofac_clean, banned + ban_reason if applicable. Cards rebuild daily at 04:50 UTC from TF's own observable telemetry. Returns ok=false with status=not_found for unknown identities so callers can distinguish "we have no record" from "we have a record showing zero activity". Useful for: marketplaces routing work to high-grade agents, peer agents deciding to trust another agent, ops dashboards monitoring an agent's standing, or operators inspecting their own reputation before claiming a wallet.
입력 스키마
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"description": "EIP-55 or lowercased EOA wallet address (0x + 40 hex). Mutually exclusive with token_prefix."
},
"token_prefix": {
"type": "string",
"description": "First 16 chars of a tf_live_ bearer token (e.g. \"tf_live_18e54f47\"). Mutually exclusive with wallet."
}
}
}🟢search_agent_directory(skill, service_area, language, available, max_rate, ...)
Search the TensorFeed Agent Self-Directory for hireable AI agents. Filter by skill (from a controlled vocab including research, data-analysis, coding, content-writing, voice-acting, image-generation, etc), service_area (research/data/coding/writing/voice/image/video/other), language (BCP 47), availability, hourly rate cap, minimum years of experience, or verified-hireable status. Verified-hireable members (operators paying $5 USDC/30 days for top-tier visibility) sort first. Free tier capped at 25 results. Returns wallet, display_name, operator_url, skills, rates, languages, years_experience, composite reputation rank, trust grade. TF publishes self-descriptions; TF takes no fee from off-platform transactions between operators and the agents who contact them.
입력 스키마
{
"type": "object",
"properties": {
"skill": {
"type": "string",
"description": "Filter by a single skills_tag (must be in controlled vocab)."
},
"service_area": {
"type": "string",
"description": "Filter by service_area (research|data|coding|writing|voice|image|video|other)."
},
"language": {
"type": "string",
"description": "BCP 47 language code (e.g. en, ja, es-MX)."
},
"available": {
"type": "boolean",
"description": "Only operators self-declaring as available_for_hire."
},
"max_rate": {
"type": "number",
"description": "Maximum hourly_rate_max_usd (operators with no rate set are NOT filtered out)."
},
"min_experience": {
"type": "number",
"description": "Minimum years_experience (operators with no value set ARE filtered out)."
},
"verified": {
"type": "boolean",
"description": "Only verified-hireable operators (active $5/30d badge)."
},
"limit": {
"type": "number",
"description": "Max results to return (1-25, default 25)."
}
}
}🟢get_verified_hireable_status(wallet)
Look up whether a specific wallet has an active verified-hireable subscription on the TensorFeed Agent Directory. Returns { verified_hireable: bool, verified_hireable_until?: ISO } for a given wallet. Useful for downstream marketplaces or peer agents who want to confirm a published-rate or active-availability badge is current before routing work to that wallet.
입력 스키마
{
"type": "object",
"properties": {
"wallet": {
"type": "string",
"description": "EIP-55 or lowercased wallet address (0x + 40 hex)."
}
},
"required": [
"wallet"
]
}🟢list_directory_skills
Return the distribution of skill tags across all active operator claims on the TensorFeed Agent Directory. Sorted by count desc. Useful for agents discovering what kinds of work other operators advertise on TF, OR for agent-marketplaces wanting to mirror TF's controlled vocab.
입력 스키마
{
"type": "object",
"properties": {}
}🟢check_free_tier_status
Check the caller IP's free premium-API trial quota. TensorFeed gives 100 free /api/premium/* calls per IP per 24h rolling window with no auth required. This tool returns used_today, remaining, and resets_at without consuming a quota slot. Use it before deciding whether to make a paid call versus waiting for the trial reset. No arguments.
입력 스키마
{
"type": "object",
"properties": {}
}🟡submit_wantlist_item(topic, request_type, description, contact_optional)
Submit a wantlist entry telling TensorFeed what data you wish was served. Aggregated patterns inform TF's pipeline priorities. Anonymous by default, no PII collected, items expire after 30 days. Per-IP rate limit 5 submissions per 24h. Signal collector, not a contract.
입력 스키마
{
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "Short label for the data category, e.g. \"real estate records\" or \"crypto on-chain treasury\""
},
"request_type": {
"type": "string",
"enum": [
"data_source",
"endpoint",
"tool",
"mcp",
"integration",
"other"
],
"description": "What kind of thing you want. Defaults to \"other\" if omitted."
},
"description": {
"type": "string",
"description": "1 to 2 sentences explaining the use case. Max 500 chars."
},
"contact_optional": {
"type": "string",
"description": "Optional contact for follow-up. Leave blank to stay anonymous."
}
},
"required": [
"topic",
"description"
]
}🟢register_free_watch(spec, callback_url, secret, fire_cap)
Register a free webhook subscription. TensorFeed POSTs HMAC-signed deliveries to your callback_url when the watch spec fires (price drop, status change, leaderboard rank shift, macro indicator threshold crossing, etc). 5 watches per IP, 25 fires per watch, 30-day TTL. Same delivery infrastructure as paid /api/premium/watches. If you omit secret, TensorFeed generates one and returns it; you cannot retrieve it again later. Same IP for management; manage via the REST endpoints under /api/watches/free/{id}.
입력 스키마
{
"type": "object",
"properties": {
"spec": {
"type": "object",
"description": "Watch spec. Examples: { type: \"price\", model: \"opus-4-7\", field: \"blended\", op: \"lt\", threshold: 50 }; { type: \"status\", provider: \"openai\", op: \"becomes\", value: \"down\" }; { type: \"leaderboard_rank\", provider: \"anthropic\", op: \"drops_below\", threshold: 3 }; { type: \"macro_indicator\", source: \"fred\", series_id: \"T10Y2Y\", metric: \"value\", op: \"crosses\", threshold: 0 }; { type: \"digest\", cadence: \"daily\" }."
},
"callback_url": {
"type": "string",
"description": "HTTPS URL to receive POST deliveries. Must NOT be private/localhost (SSRF guarded)."
},
"secret": {
"type": "string",
"description": "Optional shared secret for HMAC-SHA256 signing. If omitted, TensorFeed generates a 32-hex secret and returns it once."
},
"fire_cap": {
"type": "number",
"description": "Optional cap on total fires for this watch. Capped at 25 for free tier; smaller values honored."
}
},
"required": [
"spec",
"callback_url"
]
}🟢search_sec_edgar(q, forms, startdt, enddt, limit)
Lucene-style full-text search across the entire SEC EDGAR public-filings corpus since the 1990s. Forms include 10-K (annual), 10-Q (quarterly), 8-K (current event), DEF 14A (proxy), S-1 (IPO), 13F (institutional holdings), and ~70+ others. License: US Government public domain. The killer endpoint for finance and equity-research agents.
입력 스키마
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search query (Lucene syntax supported)"
},
"forms": {
"type": "string",
"description": "Comma-separated form types (e.g. \"10-K,10-Q,8-K\")"
},
"startdt": {
"type": "string",
"description": "Start date YYYY-MM-DD"
},
"enddt": {
"type": "string",
"description": "End date YYYY-MM-DD"
},
"limit": {
"type": "number",
"description": "Max hits (1-50)",
"default": 10
}
},
"required": [
"q"
]
}🟢get_sec_submissions(cik)
Get entity metadata + recent filings for one company by CIK. Accepts canonical zero-padded CIK ("0000320193"), bare numeric ("320193"), or "CIK0000320193" prefixed. Returns full company profile (name, tickers, exchanges, EIN, SIC, addresses) plus the most-recent ~1000 filings. License: US Government public domain.
입력 스키마
{
"type": "object",
"properties": {
"cik": {
"type": "string",
"description": "CIK in any zero-padding form, or CIK-prefixed"
}
},
"required": [
"cik"
]
}🟢lookup_sec_company_ticker(ticker_or_cik)
Resolve a stock ticker symbol (e.g. AAPL, MSFT, NVDA) or numeric CIK to the canonical SEC entity record. Returns ticker, CIK, company name, and exchange. Pair with get_sec_submissions to retrieve filings. License: US Government public domain.
입력 스키마
{
"type": "object",
"properties": {
"ticker_or_cik": {
"type": "string",
"description": "Ticker symbol (case-insensitive) or numeric CIK"
}
},
"required": [
"ticker_or_cik"
]
}🟢query_fda(dataset, search, limit, skip, sort)
Query any openFDA dataset: drug adverse events (FAERS), drug labeling (SPL), drug recalls, food recalls, or medical device events. Pick the dataset with the dataset argument. Uses openFDA Lucene-style search syntax (e.g. "patient.drug.medicinalproduct:aspirin", "openfda.brand_name:tylenol"). License: openFDA CC0 1.0 Universal Dedication, FDA waiver of all copyright; commercial redistribution permitted.
입력 스키마
{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"enum": [
"drug_events",
"drug_labels",
"drug_recalls",
"food_recalls",
"device_events"
],
"description": "Which openFDA dataset to query. drug_events = FAERS adverse event reports. drug_labels = structured product labeling (indications, dosage, warnings, contraindications, pharmacology). drug_recalls / food_recalls = enforcement records with Class I/II/III classification, reason, and distribution. device_events = MAUDE device adverse events."
},
"search": {
"type": "string",
"description": "openFDA Lucene-style search expression. Examples: patient.drug.medicinalproduct:aspirin, openfda.brand_name:tylenol, patient.reaction.reactionmeddrapt:headache+AND+receivedate:[20240101+TO+20251231]"
},
"limit": {
"type": "number",
"description": "Max records to return (1-100)",
"default": 10
},
"skip": {
"type": "number",
"description": "Pagination offset (0-25000)",
"default": 0
},
"sort": {
"type": "string",
"description": "Sort by field (e.g. receivedate:desc)"
}
},
"required": [
"dataset"
]
}🟢get_eia_series(route, start, end, length)
Get a US Energy Information Administration time-series. Curated routes: petroleum/pri/spt (WTI/Brent crude spot prices), petroleum/pri/gnd (US retail gasoline), natural-gas/pri/sum (Henry Hub + retail nat gas), electricity/retail-sales (by state and sector), electricity/electric-power-operational-data (net generation by fuel), total-energy. License: US Government public domain.
입력 스키마
{
"type": "object",
"properties": {
"route": {
"type": "string",
"description": "One of: petroleum/pri/spt, petroleum/pri/gnd, natural-gas/pri/sum, electricity/retail-sales, electricity/electric-power-operational-data, total-energy"
},
"start": {
"type": "string",
"description": "Start date YYYY-MM-DD"
},
"end": {
"type": "string",
"description": "End date YYYY-MM-DD"
},
"length": {
"type": "number",
"description": "Max records (1-5000)",
"default": 100
}
},
"required": [
"route"
]
}🟢get_research_papers(source, limit)
Get recent AI/ML research papers from one of three feeds, chosen with the source argument. arxiv_recent is the firehose: newest arXiv submissions in cs.AI / cs.LG / cs.CL / cs.CV by submission date, refreshed daily at 11:30 UTC. trending is citation-ranked from Semantic Scholar across five fan-out queries, deduped, refreshed daily at 11:00 UTC. hf_daily is Hugging Face editor-curated with community upvotes and discussion counts, refreshed daily at 14:15 UTC. Pick arxiv_recent for what is brand new, trending for what is influential, hf_daily for what practitioners are discussing. License: arXiv and Semantic Scholar permit metadata use; the standard attribution block ships on every response.
입력 스키마
{
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"arxiv_recent",
"trending",
"hf_daily"
],
"description": "Which feed to read. arxiv_recent = newest submissions (max 50). trending = citation-ranked (max 30). hf_daily = editor-curated with upvotes (max 50)."
},
"limit": {
"type": "number",
"description": "Max papers to return. Capped per source: arxiv_recent 50, trending 30, hf_daily 50."
}
},
"required": [
"source"
]
}🟢get_weather_alerts(area, event, severity, urgency, status, ...)
Get active US weather alerts from the National Weather Service. US-only coverage. Filter by 2-letter state code (area), exact event name (e.g. 'Tornado Warning', 'Heat Advisory'), severity (Extreme | Severe | Moderate | Minor | Unknown), urgency (Immediate | Expected | Future | Past | Unknown), and status (actual | exercise | system | test | draft). Returns a flattened alerts list with id, event, severity, urgency, headline, description, areaDesc, sent/effective/expires/ends, sender_name, web URL. Refreshed in real time upstream; cached 60s. License: US Government public domain (17 USC §105).
입력 스키마
{
"type": "object",
"properties": {
"area": {
"type": "string",
"description": "2-letter US state or territory code (CA, TX, PR, etc). Optional."
},
"event": {
"type": "string",
"description": "Exact NWS event name (e.g. \"Tornado Warning\", \"Heat Advisory\"). Optional."
},
"severity": {
"type": "string",
"description": "One of: Extreme, Severe, Moderate, Minor, Unknown. Optional."
},
"urgency": {
"type": "string",
"description": "One of: Immediate, Expected, Future, Past, Unknown. Optional."
},
"status": {
"type": "string",
"description": "One of: actual, exercise, system, test, draft. Optional."
},
"limit": {
"type": "number",
"description": "Max alerts to return (1-500). Default 50.",
"default": 50
}
}
}🟢get_recent_earthquakes(magnitude, period, limit)
Get recent earthquakes from the US Geological Survey's pre-built summary feeds. Choose a magnitude bucket (significant | 4.5 | 2.5 | 1.0 | all) and a time window (hour | day | week | month). Returns a flattened list with id, magnitude, place, time (ISO 8601), depth_km, longitude, latitude, tsunami flag, USGS detail URL. Upstream feeds refresh every minute. License: US Government public domain (17 USC §105).
입력 스키마
{
"type": "object",
"properties": {
"magnitude": {
"type": "string",
"description": "Magnitude bucket. One of: significant, 4.5, 2.5, 1.0, all. Default 4.5.",
"default": "4.5"
},
"period": {
"type": "string",
"description": "Time window. One of: hour, day, week, month. Default day.",
"default": "day"
},
"limit": {
"type": "number",
"description": "Max earthquakes to return (1-500). Default 50.",
"default": 50
}
}
}🟢get_agent_opportunities(limit, signal)
Get TensorFeed's daily scan of new repositories across the AI agent ecosystem (Anthropic, OpenAI, Microsoft, ModelContextProtocol, HuggingFace, LangChain, frontier labs) plus recent MCP/x402/skills keyword sweeps. Each opportunity includes the GitHub repo path, description, stars, last update, the source signal, and a composite score (signal weight × log10(stars+1) × recency decay). Refreshed daily at 13:30 UTC. Useful for surfacing distribution targets, integration ideas, or just a daily digest of what's launching across the agent space. License: GitHub data via the public Search API; output is TensorFeed's curated ranking.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Max opportunities to return (1-25)",
"default": 10
},
"signal": {
"type": "string",
"description": "Optional filter to one signal source. One of: anthropic-org, openai-org, microsoft-org, mcp-org, huggingface-org, langchain-org, frontier-labs, mcp-keyword, x402-keyword, skill-keyword, vertical-pattern."
}
}
}⚪route_verdict(task, model, max_latency_p95_ms, require_operational, exclude_deprecated, ...)
PREMIUM (1 credit, $0.02). The signed model-routing decision: for a task (code, reasoning, creative, general) or a named model, returns the single best model to use right now, fusing pricing, benchmark capability discounted for contamination, real production usage, measured p95 latency, and live operational state, with runners-up and an AFTA-signed receipt over the inputs. Pay per call with an x402 wallet payment (arguments.payment, or an X-PAYMENT header; strict HTTP-402 transport at https://mcp.tensorfeed.ai/mcp?x402=strict) or use an Authorization: Bearer tf_live_... credits token. No token and no USDC? Claim free trial credits by signing a wallet message at https://tensorfeed.ai/api/payment/trial-credits.
입력 스키마
{
"type": "object",
"properties": {
"task": {
"type": "string",
"description": "One of code, reasoning, creative, general. Provide task or model."
},
"model": {
"type": "string",
"description": "Canonical model id or display name to narrow the verdict to one model."
},
"max_latency_p95_ms": {
"type": "number",
"description": "Drop candidates whose measured p95 latency exceeds this floor."
},
"require_operational": {
"type": "string",
"description": "Default true. Pass \"false\" to keep candidates known down or in failover."
},
"exclude_deprecated": {
"type": "string",
"description": "Default true. Pass \"false\" to keep deprecated or sunsetted models."
},
"payment": {
"type": "string",
"description": "Optional base64 x402 payment payload (the same string an X-PAYMENT header would carry). Sign against the accepts[0] requirement returned by an unpaid call. Alternative to the Bearer credits token."
}
}
}⚪whats_new(days, news_limit, since, payment)
PREMIUM (1 credit, $0.02). The full TensorFeed morning brief: every AI headline in the window with links, model pricing deltas, and incident detail, AFTA-signed. The free preview sibling (/api/preview/whats-new, 10 calls/IP/day) returns only summary counts plus the top 3 headline titles; this paid call returns the complete brief with no rate limit. Pay per call with an x402 wallet payment (arguments.payment, or an X-PAYMENT header; strict HTTP-402 transport at https://mcp.tensorfeed.ai/mcp?x402=strict) or use an Authorization: Bearer tf_live_... credits token. No token and no USDC? Claim free trial credits by signing a wallet message at https://tensorfeed.ai/api/payment/trial-credits. Returning caller? Pass since=<cursor> from your last brief and an unchanged poll is free (no credit charged); you pay only when something new has broken since that cursor.
입력 스키마
{
"type": "object",
"properties": {
"days": {
"type": "number",
"description": "Lookback window in days. Default 1."
},
"news_limit": {
"type": "number",
"description": "Maximum headlines returned. Default 10."
},
"since": {
"type": "string",
"description": "Cursor from your last paid brief (returned as the `poll` continuation on every paid call). Pass it back and an unchanged poll returns for free: no credit is charged. You are billed only when something new has broken since that cursor."
},
"payment": {
"type": "string",
"description": "Optional base64 x402 payment payload (the same string an X-PAYMENT header would carry). Sign against the accepts[0] requirement returned by an unpaid call. Alternative to the Bearer credits token."
}
}
}권장 프롬프트
search_agent_directorysearch_agent_directoryget_news_articlesget_news_articleslist_directory_skills커뮤니티
증거