{"name":"Niche","tagline":"Editorial intelligence MCP for individuals.","description":"Niche is an editorial intelligence MCP server: signal → angle → draft → render → publish. Built for both human creators and AI agents (Claude Desktop, Claude Code, Cursor, custom agents). One engine, two surfaces. Brand profile + voice as persisted, agent-discoverable JSON. Trust fields on every draft (verifier audit, source faithfulness, ungrounded claims).","category":"editorial-intelligence","homepage":"https://nicheangle.com","documentation":"https://api.nicheangle.com/integrations","transports":["streamable-http"],"endpoint":"https://api.nicheangle.com/mcp","auth_methods":[{"type":"bearer","scheme":"personal_access_token","prefix":"niche_sk_"},{"type":"oauth2","status":"planned"}],"skill_count":21,"skills":[{"name":"niche_signal_scan","description":"Start a new editorial run for a niche. Returns a session_id + initial status. The desk reads primary sources, ranks signal density, clusters into stories. Poll niche_session_state with the session_id until status is `cp1_awaiting_story`.","tags":["editorial","discovery","session-state"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_session_state","description":"Universal poll endpoint — read the FULL current state of a session.","tags":["editorial","discovery","session-state"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_angle_propose","description":"Pick a story by id and ask the desk for three editorial angles.","tags":["editorial","angle","story-curation"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_draft_create","description":"Lock the angle and generate platform-native drafts.","tags":["editorial","drafting","content-generation"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_draft_revise","description":"Revise a specific output.","tags":["editorial","drafting","content-generation"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_draft_publish","description":"Publish a single output to its platform.","tags":["editorial","publishing"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_angle_explore","description":"Cross-angle exploration.","tags":["editorial","angle","story-curation"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_brand_profile_set","description":"Set (or update) the persisted brand profile for a brand the user manages.","tags":["editorial","brand-intelligence","voice"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_list_sessions","description":"Enumerate the user's recent sessions.","tags":["editorial","discovery","session-state"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_brand_kit_ingest","description":"Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files OR a URL OR pasted text.","tags":["editorial","brand-intelligence","voice"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"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.","tags":["editorial","brand-intelligence","voice"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_brand_profile_get","description":"Read-back tool: verify what's actually persisted for a brand profile WITHOUT re-setting it.","tags":["editorial","brand-intelligence","voice"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_brand_profile_template","description":"Return the empty BrandProfile schema with inline field docs.","tags":["editorial","brand-intelligence","voice"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_brand_kit_guided_setup","description":"Return a structured question chain the agent walks the user through to populate the BrandKit + VoiceProfile + (optionally) BrandProfile.","tags":["editorial","brand-intelligence","voice"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_brand_kit_update","description":"Set specific BrandKit fields by name.","tags":["editorial","brand-intelligence","voice"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_render_image_card","description":"Render an image card for a session that's reached CP3. LLM drafts an image-card brief (headline + subhead + image prompt + text position) → gpt-image-2 generates the background → Playwright composites the brand overlay → uploaded to R2.","tags":["editorial","rendering","media-generation"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_render_reel","description":"Render a 9:16 vertical reel for a session that's reached CP3.","tags":["editorial","rendering","media-generation"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"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 starting a new scan.","tags":["editorial","discovery","session-state"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"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.","tags":["editorial","discovery","session-state"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_session_export","description":"Export a session as a structured calendar artifact preserving session_id + per-story story_id traceability.","tags":["editorial"],"input_schema_url":"https://api.nicheangle.com/mcp"},{"name":"niche_add_output","description":"Add an output cell to a session that's already reached CP3.","tags":["editorial","drafting","content-generation"],"input_schema_url":"https://api.nicheangle.com/mcp"}],"version":"1.0.0","spec_version":"agent-skills/0.1"}