Skip to main content
In this tutorial, we’ll show how to supercharge your IDE with Cursor AI’s in-editor web search and local documentation features. By embedding search and docs directly in your coding environment, you can streamline development, boost productivity, and avoid context switching.

Searching the Web Inside the IDE

With Cursor AI, you can submit web queries from your terminal or editor, using your project files as context. For instance, try:
What is the best way to implement JWT authentication in Flask?
Cursor will fetch relevant articles, snippets, and code samples without leaving your IDE. Here’s a complete Flask example illustrating JWT authentication, refresh tokens, and token revocation:
from flask import Flask, jsonify, request
from flask_jwt_extended import (
    JWTManager, create_access_token, create_refresh_token,
    jwt_required, get_jwt_identity
)
from datetime import timedelta

app = Flask(__name__)
app.config["JWT_SECRET_KEY"] = "your-secret-key"  # Use a secure random key in production
app.config["JWT_ACCESS_TOKEN_EXPIRES"] = timedelta(hours=1)
jwt = JWTManager(app)

# In-memory token blacklist
blacklist = set()

@app.route("/login", methods=["POST"])
def login():
    username = request.json.get("username")
    password = request.json.get("password")
    # Replace with real credential validation
    if username != "test" or password != "test":
        return jsonify({"msg": "Bad username or password"}), 401

    access_token = create_access_token(identity=username)
    refresh_token = create_refresh_token(identity=username)
    return jsonify(access_token=access_token, refresh_token=refresh_token), 200

@app.route("/protected", methods=["GET"])
@jwt_required()
def protected():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

@app.route("/refresh", methods=["POST"])
@jwt_required(refresh=True)
def refresh():
    current_user = get_jwt_identity()
    new_access_token = create_access_token(identity=current_user)
    return jsonify(access_token=new_access_token), 200

@jwt.token_in_blocklist_loader
def check_if_token_revoked(jwt_header, jwt_payload):
    jti = jwt_payload["jti"]
    return jti in blacklist  # Check against your blacklist storage

if __name__ == "__main__":
    app.run(debug=True)
Always store JWT_SECRET_KEY in environment variables or a secure vault in production to protect against token forgery.

Browsing Local Docs Without Leaving Your Editor

Cursor AI embeds your local documentation—Flask, PyTorch, Python, Pytest, and more—into a dedicated sidebar. You can navigate topics or ask questions like “How do you implement meta tags in a Flask application?” and get immediate answers drawn from your project’s source docs.
The image shows a code editor with a file named "app.py" open, displaying a list of documentation options like Accord.NET and Amazon S3 in a sidebar. The interface includes tabs for "CHAT," "COMPOSER," and "BUG FINDER."
For example, Cursor might generate this base.html meta tag template:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Default meta tags -->
    <title>Default Title</title>
    <meta name="description" content="Default description for your site">
    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website">
    <meta property="og:url" content="{{ request.url }}">
    <meta property="og:title" content="Default Title">
    <meta property="og:description" content="Default description for your site">
    <meta property="og:image" content="{{ url_for('static', filename='images/default-image.jpg', _external=True) }}">
    <!-- Twitter -->
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="Default Title">
    <meta name="twitter:description" content="Default description for your site">
    <meta name="twitter:image" content="{{ url_for('static', filename='images/default-image.jpg', _external=True) }}">
    
    
</head>
<body>
    
    
</body>
</html>
You can then integrate these meta tags into your Flask routes:
@app.route('/blog/<post_id>')
def blog_post(post_id):
    post = get_post_by_id(post_id)
    return render_template(
        'blog_post.html',
        post=post,
        meta_title=post.title,
        meta_description=post.summary
    )
The image shows a code editor with a Python file open on the left and a chat interface on the right, where a user is asking a question about implementing something in Flask.

Key Features Comparison

FeatureBenefitAccess Method
In-Editor SearchQuery web resources without leaving IDE/search <query>
Local DocumentationInstant lookup for Flask, PyTorch, etc.Sidebar panel
Code SnippetsAuto-generate boilerplate and templatesChat and Composer tabs
Debugging ToolsInline error detection and fixesBug Finder tab

Benefits of In-Editor Integration

By centralizing web search, documentation, code editing, and debugging within Cursor AI, you can:
  • Maintain coding flow without context switching
  • Quickly access official docs and community knowledge
  • Generate and customize code snippets on the fly
  • Debug and troubleshoot directly in your editor
Leveraging these integrated features can reduce development time by up to 30% and improve code accuracy.

References