contextvar-opportunity-finder
Detect explicit user_id parameters in functions to identify potential opportunities for using ambient context. This is an investigation tool that flags instances for human review, not a prescriptive analyzer.
Install
mkdir -p .claude/skills/contextvar-opportunity-finder && curl -L -o skill.zip "https://mcp.directory/api/skills/download/8831" && unzip -o skill.zip -d .claude/skills/contextvar-opportunity-finder && rm skill.zipInstalls to .claude/skills/contextvar-opportunity-finder
About this skill
Contextvar Opportunity Finder
An intelligent grep tool that finds all explicit user_id usage patterns in Python code. Reports findings with context for human review.
Core Principle
This is a detection-only skill - It finds and reports all instances of explicit user_id usage without making judgments about correctness.
Read every file completely, one at a time, and report findings for EACH file before moving to the next. No shortcuts, no grep tricks, no "I'll infer from patterns". Complete reads only!
What it does: Scans code, detects patterns, reports everything it finds.
What it doesn't do: Make recommendations, filter results, or determine what's "right" or "wrong".
Detection Patterns
Pattern 1: Direct user_id Parameter
Look for functions with user_id in their parameters:
def function_name(..., user_id: str, ...):
def function_name(..., user_id: Optional[str], ...):
def function_name(..., user_id=None, ...):
Pattern 2: user_id Extraction from Dicts/Objects
Look for functions extracting user_id from parameters:
def function_name(self, context: Dict[str, Any]):
user_id = context.get('user_id')
def function_name(self, event):
user_id = event.user_id
Pattern 3: Redundant Context Setting
Look for code that sets context then passes user_id:
set_current_user_id(user_id)
result = some_function(user_id) # Passing after setting
Pattern 4: Threading Through Layers
Look for user_id passed through multiple function calls:
def handle_request(user_id):
result = process_data(user_id)
def process_data(user_id):
return validate_data(user_id)
def validate_data(user_id):
# Three layers deep
Pattern 5: Bad Dual-Mode Pattern
Constructor accepts optional user_id but methods still require it:
class Service:
def __init__(self, user_id: Optional[str] = None):
self.user_id = user_id or get_current_user_id()
def get_data(self, user_id: str): # Still requires parameter!
# Ignores self.user_id
Pattern 6: Convenience Function Wrappers
Functions that exist only to extract user_id and pass it:
def store_api_key_for_current_user(service_name: str, api_key: str):
user_id = get_current_user_id()
service.store_credential(user_id, 'api_key', service_name, api_key)
Pattern 7: Request Body User IDs
Models/endpoints accepting user_id in request payloads:
class LogoutRequest(BaseModel):
user_id: str # Security risk!
Context Clues to Report
When reporting each instance, note these surrounding context clues:
Class/Inheritance Context
- What class is the method in?
- What does the class inherit from?
- Is it a service, repository, API handler, etc?
Function Context
- Function name
- Decorators on the function
- Parameters beyond user_id
- Return type annotations
Call Context
- What's calling this function?
- What's this function calling with user_id?
- Is it part of a chain of calls?
Code Patterns
- Is there
set_current_user_id()nearby? - Is there
get_current_user_id()in the same class/file? - Are there convenience wrappers around this function?
- Does the constructor have a different pattern than methods?
File/Module Context
- Filename and path
- What kind of module is it? (api/, services/, repositories/, tools/, etc)
- Import statements that might indicate usage patterns
Investigation Process
- Find all user_id parameters in the file or directory
- Detect which pattern it matches (1-7)
- Note the context clues around each instance
- Report everything found without filtering
Output Format
## Explicit user_id Usage Report
**Found N instances across M files**
### path/to/file.py
Line X: def function_name(self, user_id: str, data: Dict):
Pattern: Direct user_id parameter
Context: Method in SomeClass, inherits from BaseClass
Line Y: user_id = event.user_id
Pattern: Extracting from object
Context: Inside handle_event() method
Line Z: self.some_service.process(user_id, ...)
Pattern: Threading through layers
Context: Calling another service with user_id
### path/to/another.py
Line A: def __init__(self, user_id: Optional[str] = None):
self.user_id = user_id or get_current_user_id()
Line B: def store_data(self, user_id: str, ...):
Pattern: Bad dual-mode pattern
Context: Constructor has dual-mode but methods require explicit
Line C: set_current_user_id(user_id)
result = service.method(user_id)
Pattern: Redundant context setting
Context: Sets ambient context then passes explicitly
### path/to/models.py
Line D: class SomeRequest(BaseModel):
user_id: str
Pattern: Request body user_id
Context: Pydantic model for API endpoint
... continues for all findings ...
The report simply shows:
- Where user_id appears
- What pattern it matches
- Basic context about its location
- No judgments about correctness
What This Tool Does NOT Do
- Does NOT determine if explicit user_id is "wrong"
- Does NOT prescribe specific fixes
- Does NOT judge architectural decisions
- Does NOT whitelist certain files or patterns
- Does NOT make recommendations
This is purely an investigation tool that surfaces instances for human review.
What This Tool Finds
- All functions/methods with
user_idparameters - Places where
user_idis extracted from objects or dicts - Chains of functions passing
user_idthrough multiple layers - Classes with inconsistent patterns (constructor vs methods)
- Wrapper functions that exist just to handle
user_id - API models accepting
user_idin request bodies - Places where context is set but
user_idis still passed
Quick Reference
| Pattern | What to Look For | Example |
|---|---|---|
def fn(user_id: str) | Functions with explicit user_id parameter | Service methods, API handlers |
user_id = context.get('user_id') | Extracting from dicts/objects | Event handlers, context processing |
set_current_user_id(uid); fn(uid) | Setting context then passing explicitly | API endpoints, request handlers |
| Multiple layers passing user_id | Threading through call chains | API → Service → Repository |
user_id: Optional[str] = None | Optional parameters with fallback | Dual-mode constructors/methods |
class Request(user_id: str) | Request body models | Pydantic models for endpoints |
| Convenience wrappers | Functions that just extract and pass | *_for_current_user() helpers |
Summary
This is an intelligent grep tool for finding user_id usage patterns. It:
- DOES: Find all instances of explicit user_id usage
- DOES: Detect which pattern each instance matches
- DOES: Report context clues around each finding
- DOES NOT: Judge whether any instance is "wrong"
- DOES NOT: Make recommendations
- DOES NOT: Filter results
Think of it as "grep for user_id patterns" with better context awareness.
More by taylorsatula
View all skills by taylorsatula →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
pdf-to-markdown
aliceisjustplaying
Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.
Related MCP Servers
Browse all serversEasily connect to your Local by Flywheel WordPress databases. Effortless setup, no manual config—ideal for WordPress dev
MCP server for Ghidra reverse engineering. Enables AI assistants to decompile binaries, analyze functions, rename variab
Supercharge browser tasks with Browser MCP—AI-driven, local browser automation for powerful, private testing. Inspired b
Automate Excel file tasks without Microsoft Excel using openpyxl and xlsxwriter for formatting, formulas, charts, and ad
Access shadcn/ui v4 components, blocks, and demos for rapid React UI library development. Seamless integration and sourc
Connect Supabase projects to AI with Supabase MCP Server. Standardize LLM communication for secure, efficient developmen
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.