{"name":"io.github.joshua-auchincloss/factsets","slug":"joshua-auchincloss-factsets","title":"Factsets MCP Server","description":"An MCP server that provides a local, persistent, self-maintaining knowledge base for AI agents","url":"https://mcp.market/server/joshua-auchincloss-factsets","rating":null,"grade":"C","score":68,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":17,"stars":1,"forks":0,"downloads_week":155,"last_push_at":"2026-03-14T14:02:17.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/joshua-auchincloss/factsets","website":null,"version":"0.2.0","remotes":[],"packages":[{"registryType":"npm","identifier":"factsets","version":"0.2.0","runtimeHint":"npx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp-server","type":"positional"}]}],"tools":[{"name":"add_resources","description":"Register one or more resources (files, URLs, APIs, commands) with metadata for tracking. The system stores retrieval methods - actual fetching is performed by you. Register immediately after fetching - don't wait for user prompting.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_skill_context","description":"Build formatted context for a skill including its full content, tags, references, and optionally hydrated referenced skills. Returns markdown suitable for agent consumption.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_stale","description":"Check for stale resources, skills with changed dependencies, and unverified facts. Returns retrieval methods for stale resources so you can refresh them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_skill","description":"Create a new skill document. Skills are markdown files that capture procedural knowledge and can reference other skills, resources, and facts.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_tags","description":"Create one or more tags for organizing facts, resources, and skills","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_config","description":"Delete a configuration value by key","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_facts","description":"Delete facts by ID, tags, age, or verification status","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_resources","description":"Delete resources by ID or URI. Also removes associated tags and skill references.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_skills","description":"Delete skills by name. Optionally delete the skill files from disk.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_config","description":"Get a configuration value by key","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_config_schema","description":"Get the configuration schema showing all available options with descriptions, types, and defaults. Use this to discover configurable settings like freshness thresholds.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_dependency_graph","description":"Get a dependency graph for a skill showing all connected skills, resources, and facts. Returns a tree structure with nodes and edges for visualization. Use this to fully saturate skill context before performing complex tasks.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_execution_log","description":"Get a specific execution log by ID to see full details including output.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_knowledge_context","description":"Build a knowledge context from tags. Returns formatted markdown with relevant facts, resources, skills, and staleness warnings. Use this to gather context before working on a task.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_maintenance_report","description":"Generate a maintenance report showing stale resources, skills with changed dependencies, and unverified facts. Use this to identify knowledge base items that need attention.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_preference_prompt","description":"Generate a natural language prompt describing all user preferences. Use this to understand how to format responses, code, and documentation according to user preferences.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_refresh_guide","description":"Get step-by-step instructions for refreshing a specific resource. Returns guidance on how to fetch new content based on the resource's retrieval method.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_resource","description":"Get a specific resource by ID or URI. Returns the stored snapshot and retrieval method for you to refresh if needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_resources","description":"Retrieve multiple resources by IDs or URIs in a single call. Returns found resources and lists any not found.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_skill","description":"Retrieve a skill by name with its full content, tags, and references. Set hydrateRefs to include content of referenced skills.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_skills","description":"Retrieve multiple skills by name in a single call. Returns found skills and lists any not found.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_user_preferences","description":"Get all user preferences including communication style, code output, documentation, and interaction settings","write_action":false,"price_micros":0,"input_schema":null},{"name":"infer_preference","description":"Update a user preference based on explicit statement or inferred behavior. Use when user indicates a preference (e.g., 'no emojis', 'be more concise'). Explicit preferences are always applied; inferred ones require high confidence.","write_action":true,"price_micros":0,"input_schema":null},{"name":"link_skill","description":"Add references from a skill to other skills, resources, or facts","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_config","description":"List all configuration values with their current settings","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tags","description":"List all tags in the knowledge base, optionally filtered by name pattern","write_action":false,"price_micros":0,"input_schema":null},{"name":"mark_resources_refreshed","description":"Mark resources as refreshed after you have verified their content is still valid","write_action":false,"price_micros":0,"input_schema":null},{"name":"prune_orphan_tags","description":"Clean up orphan tags that have zero usage (not linked to any facts, resources, skills, or execution logs). Use dryRun=true to preview which tags would be deleted without actually deleting them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reset_preferences","description":"Reset user preferences to defaults. Optionally specify keys to reset specific preferences only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_facts","description":"Restore soft-deleted facts by their IDs. Returns the count of facts that were restored.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_resources","description":"Restore soft-deleted resources by their IDs. Returns the count of resources that were restored.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_skills","description":"Restore soft-deleted skills by their names. Returns the count of skills that were restored.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_execution_logs","description":"Search execution history by tags, free text query, or success status. Find what commands were run, what worked, and learn from past experiments. Query searches across command, context, and output fields.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_facts","description":"Search for facts by tags, content query, verification status, or source type. Use this on every prompt to validate context before responding - not just at session start.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_resources","description":"Search for resources by tags, type, or URI pattern. Check for existing resources before registering new ones to avoid duplicates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_skills","description":"Search for skills by tags or title query. Check for existing skills before creating new ones to avoid duplicates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_config","description":"Set a configuration value. Use get_config_schema to see all available options with descriptions and valid values. Freshness settings control staleness thresholds in hours.","write_action":false,"price_micros":0,"input_schema":null},{"name":"submit_execution_logs","description":"Record execution logs for commands, tests, builds, or any actions. Captures command, output, success status, and tags for future reference. Use this to build institutional memory of what commands work for this project. Log immediately after running commands - don't batch or delay.","write_action":true,"price_micros":0,"input_schema":null},{"name":"submit_facts","description":"Submit one or more facts to the knowledge base. Facts with matching content will be updated. Call this immediately when learning something new - do not wait for user prompting.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sync_skill","description":"Sync a skill's content hash after the file has been modified externally. Reads the skill file and updates the stored hash if changed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_fact","description":"Update an existing fact's content, metadata, source, verification status, or tags. Find the fact by ID or exact content match. Supports replacing all tags, appending new tags, or removing specific tags.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_resource","description":"Update resource metadata (description, tags, retrieval method) without modifying snapshot content or lastVerifiedAt timestamp. Use this to fix placeholder descriptions or reorganize tags.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_resource_snapshot","description":"Update the snapshot content for a resource after you have fetched fresh data using the retrieval method","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_resource_snapshots","description":"Bulk update snapshot content for multiple resources. Each entry requires resourceId and snapshot content.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_skill","description":"Update an existing skill's metadata, tags, or references. Does not modify skill file content - use sync_skill after editing the file directly.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_tags","description":"Update descriptions for existing tags. Use this to replace auto-generated placeholder descriptions with meaningful content.","write_action":true,"price_micros":0,"input_schema":null},{"name":"verify_facts","description":"Mark one or more facts as verified/confirmed","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_facts_by_tags","description":"Bulk verify all facts that have specified tags. By default, verifies facts with ANY of the tags. Set requireAll=true to only verify facts that have ALL specified tags. Returns the count and IDs of verified facts.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":68,"grade":"C","scanned_at":"2026-10-01T23:11:33.396Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-01T23:11:33.377Z","components":{"code":{"score":20,"max":25,"notes":["202 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":4,"max":15,"notes":["last push 201 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/main.js: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"factsets","version":"0.2.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":11,"publishedAt":"2025-12-24T01:33:59.961Z","repositoryUrl":"git+https://github.com/joshua-auchincloss/factsets.git","weeklyDownloads":155}],"repo":{"found":true,"owner":"joshua-auchincloss","repo":"factsets","archived":false,"pushedAt":"2026-03-14T14:02:17Z","stars":1,"forks":0,"openIssues":8,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/56564676?v=4","ownerCreatedAt":"2019-10-14T21:34:06Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":1,"forks":0,"downloadsWeek":155,"license":"MIT","lastPushAt":"2026-03-14T14:02:17.000Z","score":17}}}},"grade_history":[],"reviews":[]}