{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_rkbr3jje235r","handle":"niche-editorial-intelligence","url":"https://wellknown.network/agents/niche-editorial-intelligence","links":{"self":"https://wellknown.network/agents/niche-editorial-intelligence/record.json","html":"https://wellknown.network/agents/niche-editorial-intelligence","markdown":"https://wellknown.network/agents/niche-editorial-intelligence/record.md","api":"https://wellknown.network/api/v1/agents/niche-editorial-intelligence","status":"https://wellknown.network/api/v1/agents/niche-editorial-intelligence/status","claim":"https://wellknown.network/agents/niche-editorial-intelligence/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/niche-editorial-intelligence/claim.json","badge":"https://wellknown.network/agents/niche-editorial-intelligence/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/niche-editorial-intelligence/history","tools":"https://wellknown.network/api/v1/agents/niche-editorial-intelligence/tools"},"ard":{"identifier":"urn:air:api.nicheangle.com:server:niche-editorial-intelligence","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Niche — Editorial Intelligence","summary":"Find the stories worth writing about: discover emerging stories, rank the angle, draft from sources.","description":"Find the stories worth writing about: discover emerging stories, rank the angle, draft from sources.","publisher":{"name":"com.nicheangle","url":null},"homepage":"https://nicheangle.com","repository":"https://github.com/sailquery/niche-mcp","version":"1.4.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.nicheangle.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-06-15T12:57:00.734502Z","publishedAt":"2026-06-15T12:57:00.734502Z","registryName":"com.nicheangle/niche"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[],"categories":[],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-10T15:31:59.917Z","lastProbedAt":"2026-10-10T15:31:59.917Z","statusComputedAt":"2026-10-10T15:32:59.738Z","reliability30d":{"probes":109,"successRate":0.9908,"p50Ms":112,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":106,"ok":105,"authBoundaryOk":0,"serviceOk":105,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T15:31:59.917Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":97,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Scan a niche you describe, right now (Pro). Returns a ranked, sourced slate of the stories people in that field are talking about, each with its independent-sou"},{"name":"niche_intelligence_query","description":"Ask an analyst-shaped question over a fresh scan of a niche (Pro): 'the biggest developments this week', 'what is emerging', 'where money is moving'. Returns th"},{"name":"niche_session_state","description":"Read the current state of a scan: status, the ranked stories with their sources and independent-source counts, and any angles already proposed. Poll this after "},{"name":"niche_angle_propose","description":"Angles on one story (Pro): up to a few distinct stances a reader could take, each with a hook, the take, and the sources that support it. Pass the session_id fr"},{"name":"niche_list_sessions","description":"List your recent scans: id, the niche you described, status and timestamps. Use it to find a session_id you no longer have."},{"name":"niche_session_cancel","description":"Cancel a scan that is still running."},{"name":"niche_whoami","description":"Orient in one read-only call: your plan (Free or Pro), the tools this server serves, and the endpoint. Call it first if you are unsure what is available."},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":8,"toolsHash":"1fdbdaf7bcbd99a5e7f95af0f2bcb806383cada69d2eb0db9a0e8fc92571b495","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-10T09:23:33.163Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":102,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Scan a niche you describe, right now (Pro). Returns a ranked, sourced slate of the stories people in that field are talking about, each with its independent-sou"},{"name":"niche_intelligence_query","description":"Ask an analyst-shaped question over a fresh scan of a niche (Pro): 'the biggest developments this week', 'what is emerging', 'where money is moving'. Returns th"},{"name":"niche_session_state","description":"Read the current state of a scan: status, the ranked stories with their sources and independent-source counts, and any angles already proposed. Poll this after "},{"name":"niche_angle_propose","description":"Angles on one story (Pro): up to a few distinct stances a reader could take, each with a hook, the take, and the sources that support it. Pass the session_id fr"},{"name":"niche_list_sessions","description":"List your recent scans: id, the niche you described, status and timestamps. Use it to find a session_id you no longer have."},{"name":"niche_session_cancel","description":"Cancel a scan that is still running."},{"name":"niche_whoami","description":"Orient in one read-only call: your plan (Free or Pro), the tools this server serves, and the endpoint. Call it first if you are unsure what is available."},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":8,"toolsHash":"1fdbdaf7bcbd99a5e7f95af0f2bcb806383cada69d2eb0db9a0e8fc92571b495","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-10T02:30:24.027Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":99,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T20:29:46.014Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":104,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T13:29:50.086Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":105,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T06:21:44.771Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":99,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T00:24:17.425Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":97,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-08T17:28:23.375Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":100,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-08T11:23:52.634Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":95,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-08T04:26:31.004Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":183,"error":null,"detail":{"tools":[{"name":"niche_signal_scan","description":"Niche (nicheangle.com) story discovery: find stories worth writing about, then draft and publish platform-native social content (LinkedIn, X threads, Instagram,"},{"name":"niche_draft_direct","description":"Draft the creator's own take or product straight into posts, with no research scan and no story/angle picks. Use this for product-led or bring-your-own-content "},{"name":"niche_intelligence_query","description":"Niche (nicheangle.com) research and analysis: answer an analyst-shaped question over fresh-scanned sources and get an intelligence answer as the deliverable, no"},{"name":"niche_session_state","description":"Universal poll endpoint: read the full current state of a session. Returns status, ranked stories, picked story_id, generated angles, picked angle_id, draft out"},{"name":"niche_angle_propose","description":"Niche content angles: pick a story from the discovery slate and surface the strongest angles worth publishing, the editorial-judgment step that turns a developm"},{"name":"niche_draft_create","description":"Niche draft content: lock the chosen angle and turn it into platform-native social drafts (LinkedIn post, X thread, Instagram, newsletter/long-form), ready to r"},{"name":"niche_draft_revise","description":"Applies the values you pass to a specific output. Accepts any subset of the output's fields: caption, hashtags, or partial script updates (hook / body / cta / h"},{"name":"niche_draft_publish","description":"Publish a single output to its platform. Defaults to dry_run=true: returns the would-publish payload plus any verifier blocks without actually filing. Set dry_r"},{"name":"niche_brand_profile_set","description":"Set or update the persisted brand profile for a brand. The profile is a structured JSON document applied across every pipeline stage: voice rules, banned terms,"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions. Returns id, niche_input, status, `outcome`, target_platforms, picked story/angle ids, and created/updated_at for each. Use"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by defau"},{"name":"niche_brand_kit_ingest_status","description":"Poll the result of an async niche_brand_kit_ingest. Pass the `ingest_id` it returned. status: 'ingesting' (keep polling) | 'done' (response carries the full kit"},{"name":"niche_voice_profile_ingest","description":"Extract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile."},{"name":"niche_brand_profile_get","description":"Read back the persisted brand profile without modifying it. Use it to confirm a profile landed as expected, to check the active profile a run is bound to, or to"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit, VoiceProfile, and (optionally) BrandProfile. Each entry carries an"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name. The write path for the structured fields (tagline / boilerplate / voice_notes / forbidden_phrases / signature_phrases / en"},{"name":"niche_render_image_card","description":"Render a visual onto a post at CP3, or edit an existing image.\n\nscope: 'full' (default) renders a new visual and requires `background`. 'recomposite' re-composi"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session at CP3. A per-beat script (typically 4-7 beats) is composited into one video: stills, voiceover, motion, caption overl"},{"name":"niche_session_revert","description":"Revert a session back to an earlier checkpoint. Use when the user (or you) decided the picked story / angle isn't the right one and you want to re-pick without "},{"name":"niche_session_cancel","description":"Cancel a running session. Marks status=failed with an error_message ('cancelled by user' or the caller's reason), and stops the in-flight orchestrator if any.\n\n"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id and per-story story_id traceability. Use after a niche_signal_scan when you want a meta"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3. Use this when the user picked a small initial cell set, previewed the drafts, and now wants another "},{"name":"niche_reuse_asset","description":"Copy an image that already exists on one output onto another cell, instant and free (no regeneration, no credits). Use this when the user wants 'the same image'"},{"name":"niche_attach_image","description":"Upload or attach a user-supplied or externally-designed image (bring-your-own asset) to a post: the creator's own visual (a product shot, their actual work, a c"},{"name":"niche_whoami","description":"List the full tool catalog and orient the agent, in one read-only call. Returns every registered tool name and the live tool count, the account (plan and credit"},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"toolCount":26,"toolsHash":"829fbb620dcb2a408070bae7fe5aebdb9c93eec7c44d976171c286a8d0d76b69","serverName":"niche-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}}],"tools":[{"name":"niche_signal_scan","description":"Scan a niche you describe, right now (Pro). Returns a ranked, sourced slate of the stories people in that field are talking about, each with its independent-sou"},{"name":"niche_intelligence_query","description":"Ask an analyst-shaped question over a fresh scan of a niche (Pro): 'the biggest developments this week', 'what is emerging', 'where money is moving'. Returns th"},{"name":"niche_session_state","description":"Read the current state of a scan: status, the ranked stories with their sources and independent-source counts, and any angles already proposed. Poll this after "},{"name":"niche_angle_propose","description":"Angles on one story (Pro): up to a few distinct stances a reader could take, each with a hook, the take, and the sources that support it. Pass the session_id fr"},{"name":"niche_list_sessions","description":"List your recent scans: id, the niche you described, status and timestamps. Use it to find a session_id you no longer have."},{"name":"niche_session_cancel","description":"Cancel a scan that is still running."},{"name":"niche_whoami","description":"Orient in one read-only call: your plan (Free or Pro), the tools this server serves, and the endpoint. Call it first if you are unsure what is available."},{"name":"niche_feed_read","description":"Read a niche's daily edition: the stories independent sources back up, each with its independent-source count (after syndicated copies are merged), the outlets "}],"package":null,"toolSurface":{"id":"ts_rvpagpyk7n9y","endpointId":"ep_zfvwzekkmvdf","hash":"1fdbdaf7bcbd99a5e7f95af0f2bcb806383cada69d2eb0db9a0e8fc92571b495","toolCount":8,"serverName":"niche-mcp","serverVersion":"0.1.0","protocolVersion":"2025-03-26","firstSeenAt":"2026-10-10T09:23:33.160Z","lastSeenAt":"2026-10-10T15:31:59.923Z","observations":2,"toolNames":["niche_signal_scan","niche_intelligence_query","niche_session_state","niche_angle_propose","niche_list_sessions","niche_session_cancel","niche_whoami","niche_feed_read"],"distinctSurfaces":3},"endpointFacts":[{"id":"ep_zfvwzekkmvdf","url":"https://api.nicheangle.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-10T09:23:33.172Z","auth":{"observedAt":"2026-10-10T09:23:33.278Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-10T09:23:33.294Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"api.nicheangle.com","issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validFrom":"2026-09-26T11:47:46.000Z","validTo":"2026-12-25T11:47:45.000Z","daysToExpiry":75,"sanCount":1,"fingerprint256":"83:C9:F9:02:DF:F8:ED:FF:15:73:B4:B3:DC:11:18:96:65:15:8E:B2:8B:39:60:1A:D3:88:E7:E1:F3:77:D7:13"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.nicheangle/niche","url":"https://registry.modelcontextprotocol.io/v0/servers/com.nicheangle%2Fniche","firstSeenAt":"2026-09-05T20:18:53.003Z","fetchedAt":"2026-10-09T09:23:00.787Z","normalizedAt":"2026-10-09T09:23:00.787Z"}]},"firstSeenAt":"2026-09-05T20:18:53.003Z","updatedAt":"2026-10-10T15:34:16.159Z"}