"Naver" matching MCP tools:
- Delete a post from the channel for good. This is not reversible, so confirm with the person first. Daily delete limits differ per channel: Threads 100 a day, Instagram only on accounts connected via Facebook, with no documented daily cap, YouTube 20 a day, Facebook 50 a day, Bluesky 35000 a day, Telegram only within 48 hours of publishing, with no documented daily cap, Naver Blog through the browser extension, with no documented daily cap, TikTok has no delete API; posts can only be removed in the app. On a scheduled or draft post nothing is on any channel yet, so this simply cancels it and removes our record. A Naver draft (target externalId starting with draft:) is only in Naver's draft box: this cancels our record and, with extension 0.7.2 or later, removes that draft too. On Threads and YouTube this also works on posts written in the channel's own app, given the link. Instagram only lets us delete on accounts connected via Facebook: an account connected with Instagram login cannot be deleted through us at all, so tell the person to delete it in the Instagram app. Facebook only lets us delete Page posts this app published, so a post made in the Facebook app cannot be deleted through us. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bridge.wake` for the user's OS if you have a shell on their computer, wait about a minute, call bridge_status, then retry once, otherwise tell the user `bridge.userMessage` as it is; `ask_user_login` / `ask_user_update` mean tell the user `bridge.userMessage`. Do not retry more than twice.ConnectorDestructiveNo auth
- Change a scheduled or draft post before it goes out, or edit a post that is already live on a channel that supports editing (list_platforms features: today Naver Blog, YouTube and some Facebook posts). Fields: content, mediaIds, accountIds, options, scheduledAt or draft. Fields you leave out keep their current value; options you pass replace the whole options object. scheduledAt moves the send time (same rules as publish), null turns it into a draft, and draft: true does the same. A thread (chain) can be changed too while it is scheduled or a draft: content replaces the first item and keeps the later items; threadItems replaces the whole chain (one item collapses it to a single post); passing threadItems to a single post turns it into a chain. Pass id of the first item — later items return 409 thread_piece with rootId. Posts that already went out return post_not_editable on channels that cannot edit a live post. A published Naver post is rewritten in place (same URL, same logNo) when you pass content, mediaIds or options — list the media ids again to keep the photos. Naver Blog caps how many posts one ID publishes; when it does, this returns 429 naver_rate_limited with retryAfterSeconds. Do not call again before that, the draft is already in Naver. Naver Blog asks which form to publish with, every post: if options.naver_blog.form is missing this returns 400 naver_form_required with forms (id, name, when). The form is the house style to use when the person has no style of their own, so read the conversation first. If they dictated the structure or you laid it out yourself, pass options.naver_blog.layout: "as-is" and the markdown goes out unchanged. Otherwise show them the forms (naver_layout with forms: "all" lays every one out side by side) and call again with the one they pick. Do not pick for them. If the Naver editor shows a "missing image" error when you open an already-published post for editing, calling update_post on that post rewrites it in place and fixes it; the URL stays the same. A Naver draft (a target whose externalId starts with draft:, from options.naver_blog.draftOnly) is not on the blog: update_post publishes uplika's copy as a new post and, with extension 0.7.2 or later, removes the old draft from Naver's draft box. To publish the draft exactly as it is in Naver, call publish_naver_draft.ConnectorDestructiveNo auth
- Submit changed/new/deleted URLs to IndexNow so search engines (Bing, Yandex, Seznam, Naver, ...) recrawl them promptly. All URLs must share one host, max 1000 per call. Requires the host's IndexNow key file to be live: call provision_indexnow_key first and make sure the user hosted the key file at its key_location (indexnow_key_not_verified means the file is missing or wrong). Costs 1 credit, refunded automatically when the submission fails.ConnectorNo auth
- How to write the body for a channel that has its own markup. Naver Blog has one; every other platform returns not_supported, which is not an error to work around. Call this before writing a Naver Blog body for the first time, or whenever you want something the basics do not cover: highlighting a phrase, a styled table, a collage, an event block, a map with several places. Without a topic you get an overview and the list of topics; with one you get that section in full, including the mistakes that fail silently. The values come from the same grammar the publisher validates against, so what this returns is what publish accepts.ConnectorNo auth
- Mark or unmark an uploaded image or video as AI-made (aiGenerated). Applies to posts published or edited after this call; posts already out do not change (use update_post to rewrite a Naver Blog post). Every copy of the same file in your workspaces follows.ConnectorNo auth
- Track Korean DART (전자공시) stock filings in English — real-time corporate disclosures for KOSPI / KOSDAQ / KONEX / KRX listed companies: 5%-rule shareholding disclosures, M&A, periodic reports, capital issuance, insider trading, audit reports. Free tier. Use this tool when the user asks about: recent Korean stock filings, DART disclosures, Korean market data, KOSPI/KOSDAQ regulatory events, "track Korean DART filings", "what did Samsung / Hyundai / SK / LG / NAVER / Kakao / 셀트리온 file", company-specific filing history, periodic / major-event / issuance / shareholding / audit filings on Korean equities. **Free tier — no license required.** Returns raw DART filings exactly as the regulator surfaces them (filer name in Korean, filing type code, receipt number, optional EN translation of the title). **Important for LLM clients — read this before retrying after a paid- tool license error.** This tool returns *raw* filings only. It does NOT classify the filer. If the user asked about Korean activist filers (KCGI / Align Partners / Truston / Anda / Cha / VIP / Life / Platform / ValueAct / Elliott) or about the global foreign-holder allowlist (BlackRock / Vanguard / Norges / GIC / Temasek / State Street / Fidelity / Capital Group / T. Rowe Price / Wellington / Goldman / JPMorgan / Morgan Stanley / Citadel / Millennium / Bridgewater + others), the matching work happens in `monitor_activist_investors` and `monitor_foreign_holders` — both require a license_key argument. A response from this free tool to a "are activists filing on X?" or "is BlackRock holding X?" question is *raw filing data*, not a classification answer — say so to the user and surface the paid tool's license-required notice instead of pretending you've answered. **Batch scan for agents (experimental).** To check MULTIPLE companies for material disclosures since your last checkpoint in ONE call — instead of N separate calls — pass `company_corp_codes` (a list, ≤10) plus a `since` timestamp. This is the portfolio-monitoring / scan-since-checkpoint workflow: give it your watchlist's corp codes and the ISO timestamp of your previous check, optionally with `material_only=True`, and it returns every filing across those companies newer than that timestamp, merged and sorted newest-first. DART has no batch endpoint, so this fans out one cache-backed call per corp code — the ≤10 cap keeps a single call from blowing past DART's daily quota.ConnectorNo auth
Matching MCP Servers
- FlicenseAqualityCmaintenanceNaver Search API + Datalab API MCP server with 19 tools for Korean web search and trend analysis.197 npm-
- AlicenseAqualityCmaintenanceEnables writing Naver blog posts with rich formatting like images, tables, formulas, and places, converting Markdown to drafts and handling publishing via MCP tools.7MIT
Matching MCP Connectors
Validate Naver Yeti IP addresses. Remote MCP validate_ip tool.
Your agent needs the open web — searched by more than one engine, and read as clean markdown rather than raw HTML. **What you can ask for** • "Search this question with two providers and tell me where they disagree." • "Scrape these 40 URLs into markdown, in one batch." • "Crawl this documentation site and give me every page." • "Do deep research on this topic and cite the sources." • "Find the academic papers behind this claim." **How to use it** Point any MCP client at https://mcp.aisa.one/search/mcp and sign in with OAuth — there is no key to create or paste. 30 tools across several independent providers: Tavily and Exa search, answers, contents and agent runs; Firecrawl scrape, batch scrape, crawl, map and search; Perplexity Sonar, Sonar Pro, reasoning and deep research; Oxylabs AI search and LLM jobs; OpenAI and Anthropic web search; and scholarly search. **Why this rather than the source** Several independent indexes behind one account, because one engine's blind spot is not visible from inside it. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the page here, then ask the same agent who links to it or how much traffic it gets — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo-serp/mcp for the Google results page itself, https://mcp.aisa.one/seo-serp-other-engines/mcp for Bing, Baidu and Naver.
- Post to social channels. Channels open today: threads, instagram, youtube, facebook, bluesky, telegram, naver_blog, tiktok. Get accountIds from select_channels — do not guess which channel the person meant. Naver Blog caps how many posts one ID publishes; when it does, this returns 429 naver_rate_limited with retryAfterSeconds. Do not call again before that, the draft is already in Naver. Naver Blog asks which form to publish with, every post: if options.naver_blog.form is missing this returns 400 naver_form_required with forms (id, name, when). The form is the house style to use when the person has no style of their own, so read the conversation first. If they dictated the structure or you laid it out yourself, pass options.naver_blog.layout: "as-is" and the markdown goes out unchanged. Otherwise show them the forms (naver_layout with forms: "all" lays every one out side by side) and call again with the one they pick. Do not pick for them. Naver Blog goes out through the user's browser extension. If the response carries a bridge object, read bridge.state: offline means that Chrome is closed and the post is queued (up to 7 days); logged_out means Chrome is on but not logged in to Naver. Either way relay bridge.userMessage to the person word for word, do not say it was published, and know that delete_post cancels a queued post and update_post rewrites it before it goes out. If the extension in that Chrome is too old for what you asked (update_post), this returns 422 extension_outdated with the installed and required versions; ask the person to update the extension. Text limits differ per channel: Threads 500 characters, Instagram 2200 characters, YouTube 5000 UTF-8 bytes, Facebook 63206 characters, Bluesky 300 graphemes and 3000 UTF-8 bytes, Telegram 4096 characters (1024 with media attached), Naver Blog 30000 characters, TikTok 2200 characters. Over the limit nothing goes out to any channel, so shorten it before calling. Images and video both work on the channels that take them. How several items sit in one post differs per channel: Threads groups up to 20 items in one post, Instagram groups up to 10 items in one post, YouTube takes 1 video and no images, Facebook groups up to 10 items in one post, Bluesky has no carousel and places up to 4 images in the post itself, Telegram groups up to 10 items in one post, Naver Blog has no carousel and places up to 40 images in the post itself, TikTok groups up to 35 items in one post. More than a channel takes is not refused: the first items up to its limit go out and that target's warning says what was left out. A channel that cannot mix images and video keeps the video. YouTube is different: it takes exactly one video, no images, and it needs options.youtube.title. Its description is measured in UTF-8 bytes, so Korean and Japanese cost three per character. Instagram cannot publish text alone: every post needs at least one image or video. A single video becomes a reel there. Set options.instagram.contentType to story for a story; stories show no caption. Non-JPEG images are converted for Instagram automatically. Facebook publishes to a Page, never a personal profile. options.facebook.link makes a link post (no media alongside), and a single video becomes a reel (3-90 seconds). Bluesky counts graphemes, not characters, and also caps UTF-8 bytes, so a post of 300 emoji can fail on the byte limit. Set options.bluesky.langs to the language of the text (1-3 BCP-47 codes like ["ko"]): without it the post never appears in language-scoped feeds, and Bluesky has no post editing to fix it later. Links, @mentions and #hashtags in the text are made clickable for you, and a link gets a preview card, so write the URL plainly. There are three ways to get a media id, pick by where the file is: media_from_url when it already has a public https address, media_upload_link when it is on the person's own device, media_presign plus media_complete when you can PUT the bytes yourself. Then pass the media ids here. On Naver Blog the body can also place media itself with  and @video(media:<id>), each on a line of its own. Ids you reference that way are picked up even if you leave them out of mediaIds, and media you pass but never reference goes at the end of the post. Those references only work when every target is Naver Blog: other channels would publish the markup as literal text, so we refuse instead. This publishes immediately unless you pass scheduledAt (we hold the post and send it at that time, on every channel) or draft: true (nothing goes out; the person or update_post finishes it later). scheduledAt needs a timezone offset, 10 minutes to a year out; ask the person which timezone they mean instead of guessing. A scheduled or draft post comes back with status scheduled or draft, can be changed with update_post, sent early with publish_now, and dropped with delete_post. Every channel also takes options.<channel>.content to send that channel a different text than the shared content, which is how Naver Blog Markdown and a 500-character Threads post fit in one call. On YouTube we pass privacyStatus through as you set it and report back what YouTube actually applied, so read the warning on the result instead of promising the person a visibility we did not confirm. Returns while the post is still publishing. The permalink is null at that moment. Call get_post with the returned id to see the final status and link. Pass wait: true to hold the response until it is really out — then you can tell the person it is posted instead of guessing. For a long post use threadItems instead of publish-then-reply: we keep the order and wait for each piece to land before sending the next one.ConnectorDestructiveNo auth
- Naver Blog only. Publishes a draft from the blog's draft box exactly as it is in Naver: the extension loads that draft in the editor and presses publish, so edits the person made by hand in Naver are kept. Do not send content. Category, tags and openType are taken from the draft unless you pass them. Returns the same shape as publish (202 with a target that resolves to published, or the bridge object when the extension is offline; wait: true holds until it settles). If that draft was made through uplika (a target whose externalId starts with draft:), the same post record flips to published instead of a second one appearing. To publish uplika's own copy of the text rather than what is in Naver, use update_post on that post instead. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bridge.wake` for the user's OS if you have a shell on their computer, wait about a minute, call bridge_status, then retry once, otherwise tell the user `bridge.userMessage` as it is; `ask_user_login` / `ask_user_update` mean tell the user `bridge.userMessage`. Do not retry more than twice.ConnectorDestructiveNo auth
- Pick which connected channels to post to. **Call this before publish and show the result to the person.** Leave scope empty to get the candidate list and let them choose. Use scope: "all" for every active channel, or an array mixing platform names ("threads"), handles ("@vibe.trender") and account ids. Duplicates are folded, expired and not-yet-live channels are dropped into `skipped` with a reason, a sentence you can read to the person, and a link to reconnect. Pass the returned accountIds to publish unchanged. `limits` is the tightest rule across the chosen channels, so write to that. If both accountIds and candidates come back empty, nothing is connected yet. Send the person to https://uplika.com/dashboard/connections to connect a channel, then call this again. When a Naver Blog account is selected the response carries bridge with state (online, offline, logged_out), userMessage to relay to the person, and queued; if state is not online, tell the person before publishing.ConnectorNo auth
- Retry the targets that failed on a publish. Targets that already went out are left alone. Naver Blog caps how many posts one ID publishes; when it does, this returns 429 naver_rate_limited with retryAfterSeconds. Do not call again before that, the draft is already in Naver. Naver Blog asks which form to publish with, every post: if options.naver_blog.form is missing this returns 400 naver_form_required with forms (id, name, when). The form is the house style to use when the person has no style of their own, so read the conversation first. If they dictated the structure or you laid it out yourself, pass options.naver_blog.layout: "as-is" and the markdown goes out unchanged. Otherwise show them the forms (naver_layout with forms: "all" lays every one out side by side) and call again with the one they pick. Do not pick for them. If nothing failed you get nothing_to_retry. Only applies to posts published through us. This replays the same payload, so read errorCode and retryable on get_post first: when retryable is false the arguments have to change and you should call publish again instead. On Naver Blog a failed target may still have left a post or a draft in the editor, so check the blog before retrying.ConnectorDestructiveNo auth
- Re-read one connected channel's metadata. On Naver Blog this re-reads the blog's categories through the user's browser extension and waits up to a minute for it; list_accounts then shows the new list under naverBlog.categories. Call this when a category the person mentions is not in list_accounts yet. If the extension is offline you get 202 and the refresh runs when that browser comes back. Other channels return refresh_unsupported because their metadata is live on every call. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bridge.wake` for the user's OS if you have a shell on their computer, wait about a minute, call bridge_status, then retry once, otherwise tell the user `bridge.userMessage` as it is; `ask_user_login` / `ask_user_update` mean tell the user `bridge.userMessage`. Do not retry more than twice.ConnectorNo auth
- Like a post — or a comment: pass replyTo (a reply id from list_replies) to like that comment instead of the post. Idempotent: if it is already liked the call succeeds with already: true and nothing is toggled. There is no unlike. Works on Naver Blog and on Instagram accounts connected through Facebook; other channels answer not_supported. On Naver Blog the post can belong to another blog: pass its link and we act as the connected account. Naver ignores liking your own post, and that comes back as naver_not_allowed rather than a fake success. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bridge.wake` for the user's OS if you have a shell on their computer, wait about a minute, call bridge_status, then retry once, otherwise tell the user `bridge.userMessage` as it is; `ask_user_login` / `ask_user_update` mean tell the user `bridge.userMessage`. Do not retry more than twice.ConnectorDestructiveNo auth
- Follow an account on the channel. Naver Blog only today: adds the blog as a neighbor. mutual: true sends a mutual-neighbor request that the other blog has to accept, so the result is pending until they do; without it the blog is added as a plain neighbor right away. Already a neighbor comes back as already. There is no unfollow. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bridge.wake` for the user's OS if you have a shell on their computer, wait about a minute, call bridge_status, then retry once, otherwise tell the user `bridge.userMessage` as it is; `ask_user_login` / `ask_user_update` mean tell the user `bridge.userMessage`. Do not retry more than twice.ConnectorDestructiveNo auth
- Naver Blog only. Expands seed keywords one level through Naver autocomplete on the server and returns every word found with the seed it came from (found[].from is seed or L1:<seed>). These are candidates to measure with research_naver_keywords, not proven keywords. Up to 10 seeds. Cached seven days; a call with at least one uncached seed spends one of 20 expansions per person per day. Server-side autocomplete is off by default: when the server answers naver_autocomplete_unavailable, pass your own keyword list to research_naver_keywords instead. naver_autocomplete_paused and naver_autocomplete_busy carry retryAfterSeconds. Returns 403 research_tool_disabled with enableUrl if the person has not turned this tool on for connectors; tell them to open that link.ConnectorNo auth
- KRX 6-digit ticker → DART corp entry resolver. Free tier. Use this tool when the user provides a 6-digit Korean stock code (e.g. 005930 for Samsung Electronics, 000660 for SK hynix, 035420 for NAVER, 035720 for Kakao, 005380 for Hyundai Motor) and you need the company name + corp_code for downstream filings or industry-news lookups. When the code is unresolved but looks like a Korean preferred-stock ticker (6 digits, non-zero last digit, e.g. 005935 for 삼성전자우), the response carries an additive `related_common_stock` hint pointing at the common-stock entry — the corp registry only maps common stock, so no preferred-stock corp_code is fabricated.ConnectorNo auth
- Returns a summary of one MediBill Saver dispute scenario: title, category, the federal statute backing the patient's right to dispute, and a link to the full scenario page (which contains the how-to-spot checklist and sample dispute language). Useful when a patient asks 'how do I dispute X' or 'what is HIPAA §164.524'. Free, no authentication required.ConnectorNo auth
- Returns the full index of dispute scenarios MediBill Saver covers — slug, title, category, and the federal statute. Useful to discover which scenarios exist before calling get_dispute_scenario. Free, no authentication required.ConnectorNo auth
- Find a ticker from part of the name — Korean or Latin, case-insensitive — or a 6-digit code, across every listed stock we publish (no ETFs; markets are named in the response footer). Korean readings of Latin names also match ('네이버' finds NAVER, '케이티' finds KT/KTis), and so do common Korean nicknames for large caps ('삼전' finds 삼성전자, '하닉' SK하이닉스). Large caps also match their official English name ('Samsung Electronics', 'SK hynix'; 'samsung' lists the Samsung group); smaller stocks need the Korean name. Up to 10 matches, market-cap sorted. | 이름 일부(한글·영문 모두, 대소문자 무시)나 6자리 코드로 찾습니다. 영문 이름의 한글 읽기('네이버'→NAVER, '케이티'→KT·KTis)와 흔한 줄임말('삼전'→삼성전자, '하닉'→SK하이닉스)도 매치됩니다. 대형주는 공식 영문 이름으로도 찾습니다('Samsung Electronics'·'SK hynix'). 그 밖의 종목은 한국어 이름으로 찾으세요. 수록 전 종목 · 시총순 최대 10건.ConnectorNo auth
- Naver Blog only. Shows how publish will lay the body out before anything goes out. By default (layout: template) publish reshapes the markdown into the blog's house form: #/## titles become underlined quote headings, a thin rule sits between sections, photos you did not place with media: references go one per section and the rest pair up at the end. Text never changes. Call this with the same content and mediaIds you will publish, show the person the result if they care about structure, then publish (it applies the same layout) or pass options.naver_blog.layout: "as-is" to publish exactly what you wrote. To let the person choose a form, pass forms: "all" (or a list of ids): you get every preset laid out side by side with its name, when to use it and a summary (sections, photos). Show them, let the person pick, then publish with options.naver_blog.form set to the chosen id. The server never picks for you.ConnectorNo auth
- Naver Blog only. Reads a blog's public RSS feed (its latest posts, at most 50) and says whether the titles are written for search: the share of titles carrying a search intent word (price, how to, review), how many start with a date or episode label, posts per month, the categories, and the words the blog repeats in titles (seedCandidates: candidates to research, not proven keywords). summary.oldest and summary.newest say which dates it read, so a quiet blog's 50 posts are not everything; summary.capped is true at 50. flags and thresholds carry the judgement (lowIntent when the intent share is under thresholds.lowIntentPct). Works for any public blog, not only connected ones, and needs no Naver keys. Cached 24 hours; a cache miss spends one of 20 diagnoses per person per day (quota in the response). Returns 403 research_tool_disabled with enableUrl if the person has not turned this tool on for connectors; tell them to open that link.ConnectorNo auth
- Naver Blog only. Posts to Naver Blog are written by the uplika browser extension inside the user's own Chrome, so nothing goes out while that Chrome is closed. Call this before publishing to Naver Blog. If online is false, the response carries wake commands per OS that open Chrome on the user's computer in the profile that has the extension (found by extension id). If you have a shell on that computer, run the one for its OS, then call this again or get_post; the extension reconnects within about a minute and queued posts go out. publish also returns the same bridge object when the extension is offline. state is one of online, offline, logged_out (Chrome is on but not logged in to Naver). userMessage is a sentence in the person's language to relay as it is. queued is how many posts wait for the extension; delete_post cancels them and update_post rewrites them before they go out. extensionVersion and kinds say what that extension can do.ConnectorNo auth